Код сначала добавить сущность с отношением многие ко многим

У меня есть объект 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();  
}
Другие вопросы по тегам