Сначала код 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