Сначала я использую код и могу добавлять записи без проблем.База данных создана правильно и засевается без проблем.Но вызов SaveChanges () в моем действии «Изменить» обновляет только сущность, а не какие-либо свойства навигации или ссылки.
Упрощенная версия моей модели:
public class Contact : IMyBaseObject
{
public Contact()
{
this.Delete = false;
this.ContactTypes = new HashSet<ContactType>();
}
public int Id {get; set;}
public string Name {get;set;}
public bool Delete {get;set;}
public virtual ICollection<ContactType> ContactTypes { get; set; }
public virtual USState USState { get; set; }
}
public class ContactType : MyBaseObject
{
public ContactType()
{
}
public int Id {get; set;}
public string Name {get;set;}
public virtual ICollection<Contact> Contacts {get;set;}
}
public abstract class Territory : MyBaseObject
{
public int Id {get; set;}
public string Name {get;set;}
public string Code {get;set;}
}
public class USState : Territory
{
public USState()
{
}
// Navigation properties
public virtual ICollection<Contact> Contacts { get; set; }
}
Я не буду включатькод, но у меня есть некоторые пользовательские привязки модели происходит.Мое действие «Изменить» (с использованием MVC 3) не заполнялось свойствами ContactType или USState.Привязка правильно возвращает полностью заполненный объект Contact с правильными значениями из формы.
Если я правильно понимаю EF 4.1, мне нужно только сделать следующее, чтобы сохранить изменения в базе данных при сохранении моего объекта Contact:
if(ModelState.IsValid)
{
context.Entry(contact).State = EntryState.Modified;
context.SaveChanges();
}
Однако при этом обновляются только примитивные свойства.В вышеприведенном примере я пропустил несколько вещей: я использую транзакцию, блок try catch и проверяю, является ли она новой записью.
Я использовал SQL Profiler и могу подтвердить, что обновление запрашиваетдля таблиц ContactType и Territory не отправляется на сервер базы данных.
Свойства состояния моих навигационных и справочных свойств изменены, но я также попытался вручную установить следующее:
context.Entry(contact).Collections("ContactTypes").EntityEntry.State = EntityState.Modified;
context.Entry(contact).Reference("USState").EntityEntry.State = EntityState.Modified;
Я могу ошибаться, но я почти уверен, что мой код работал под CTP5.
Есть идеи?На данный момент, я не уверен, как мне подойти к отладке.
Спасибо, Стив