EF 4.1 SaveChanges не обновляет свойства навигации или ссылки

Я сначала использую код и могу без проблем добавлять записи. База данных создана правильно и заполняется без проблем. Но вызов SaveChanges () в моем действии Edit обновляет только сущность, а не какие-либо свойства навигации или ссылки.

Упрощенная версия моей модели:

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 и таблицы территорий не отправляются на сервер базы данных.

Свойства состояния моей навигации и ссылочных свойств изменены, но я также попытался вручную установить это:

    context.Entry(contact).Collections("ContactTypes").EntityEntry.State = EntityState.Modified;
    context.Entry(contact).Reference("USState").EntityEntry.State = EntityState.Modified;

Я мог ошибаться, но я почти уверен, что мой код работал под CTP5.

Есть идеи? На данный момент я не уверен, как мне подойти к отладке этого.

Спасибо, Стив

17
задан Ladislav Mrnka 1 April 2011 в 18:19
поделиться