Сначала код EF5 с ASP.NET Web API: обновите сущность с отношением «многие ко многим»

Я пытаюсь обновитьCustomer в моей базе данных с использованием ASP.NET Web API и Entity Framework 5 сначала, но это не работает. Мои сущности выглядят так:

public class CustomerModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    // More fields

    public ICollection<CustomerTypeModel> CustomerTypes { get; set; }
}

public class CustomerTypeModel
{
    public int Id { get; set; }
    public string Type { get; set; }

    [JsonIgnore]
    public ICollection<CustomerModel> Customers { get; set; }
}

Ничего особенного. Я создал веб-интерфейс, в котором пользователи могут добавлять клиентов, указав их имя и проверив один или несколько типов клиентов. При нажатии кнопки отправки данные отправляются в мой метод веб-API:

public void Put([FromBody]CustomerModel customer)
{
    using (var context = new MyContext())
    {
        context.Customers.Attach(customer);
        context.Entry(customer).State = EntityState.Modified;
        context.SaveChanges();
    }
}

Это обновляет поля клиента, но связанные типы клиентов игнорируются. Входящийcustomer объект содержит списокCustomerTypes это должно быть связано с:

[0] => { Id: 1, Type: "Finance", Customers: Null },
[1] => { Id: 2, Type: "Insurance", Customers: Null }
[2] => { Id: 3, Type: "Electronics", Customers: Null }

Но вместо просмотра этого списка и добавления / удаления связанных объектов, EF просто игнорирует его. Новые ассоциации игнорируются, а существующие ассоциации остаются, даже если их следует удалить.

У меня была похожая проблема при вставке клиента в базу данных, это было исправлено, когда я настроил состояние этих объектов наEntityState.Unchanged, Естественно, я попытался применить это же волшебное исправление в моем сценарии обновления:

public void Put([FromBody]CustomerModel customer)
{
    using (var context = new MyContext())
    {
        foreach (var customertype in customer.CustomerTypes)
        {
            context.Entry(customertype).State = EntityState.Unchanged;
        }

        context.Customers.Attach(customer);
        context.Entry(customer).State = EntityState.Modified;
        context.SaveChanges();
    }
}

Но EF продолжает показывать то же самое поведение.

Есть какие нибудь идеи как это починить? Или я должен просто сделать руководство, понятное для спискаCustomerTypes а потом вручную их добавлять?

Заранее спасибо.

JP

Ответы на вопрос(2)

Ваш ответ на вопрос