Код сначала добавить сущность с отношением многие ко многим
У меня есть объект Customer, который может иметь несколько типов клиентов, и каждый тип клиента может иметь несколько клиентов. Я новичок в EF, но сумел добавить клиента, но не могу понять синтаксис, подходящий для добавления типов клиентов клиента.
Мой класс клиентов (упрощенно):
public partial class Customer
{
public virtual int Id { get; set;}
public virtual string Name { get; set;}
#region Navigation Properties
public virtual ICollection<CustomerType> CustomerTypes
{ get; set; }
#endregion
}
Тип клиента:
public partial class CustomerType
{
public virtual int Id
{
get;
set;
}
public virtual string Name
{
get;
set;
}
#region Navigation Properties
public virtual ICollection<Customer> Customers
{ get; set; }
#endregion
}
Когда я запускаю этот проект, создается таблица CustomerTypeCustomer со столбцами Customer_Id и CustomerType_Id, так что это нормально.
Затем я создаю клиента следующим образом:
// code behind
var customer = new Customer();
customer.name = txtCustomerName.Text;
using (var context = new MyEntities())
{
context.Customers.Add(customer);
context.SaveChanges();
}
Я посмотрел здесь Вставить / обновить многие для многих Entity Framework. Как мне это сделать? и попытался сделать что-то подобное с типами клиентов:
var customer = new Customer();
customer.name = txtCustomerName.Text;
// only starting with one customer type selected in a check box list
CustomerType customerType = context.CustomerTypes.FirstOrDefault(i => i.Id == 1);
using (var context = new MyEntities())
{
// IncidentTypes throws Object reference not set to an instance of an object
customer.CustomerTypes.add(customerType);
context.Customers.Add(customer);
context.SaveChanges();
}
Я что-то упускаю здесь очевидное?
Заранее спасибо.
Изменить: по какой-то причине у меня есть только.Add(без AddToObject, AttachTo и т. Д.
2 ответа
Вы должны инициализировать CustomersTypes
Коллекция первая.
customer.CustomerTypes = new List<CustomerType>();
Вы также можете добавить эту инициализацию к вашему Customer
конструктор.
Это один из способов сделать это:
var customer = new Customer();
customer.name = txtCustomerName.Text;
// only starting with one customer type selected in a check box list
//add Include there
CustomerType customerType = context.CustomerTypes.Include("Customers").FirstOrDefault(i => i.Id == 1);
using (var context = new MyEntities())
{
// IncidentTypes throws Object reference not set to an instance of an object
//customer.CustomerTypes.add(customerType);
//context.Customers.Add(customer);
customerType.Customers.Add(customer);
context.SaveChanges();
}