EF: Ошибка проверки при обновлении при использовании требуемых свойств с отложенной загрузкой

Учитывая эту чрезвычайно простую модель:

public class MyContext : BaseContext
{
    public DbSet<Foo> Foos { get; set; }
    public DbSet<Bar> Bars { get; set; }
}

public class Foo
{
    public int Id { get; set; }
    public int Data { get; set; }
    [Required]
    public virtual Bar Bar { get; set; }
}

public class Bar
{
    public int Id { get; set; }
}

Следующая программа терпит неудачу:

object id;
using (var context = new MyContext())
{
    var foo = new Foo { Bar = new Bar() };
    context.Foos.Add(foo);
    context.SaveChanges();
    id = foo.Id;
}
using (var context = new MyContext())
{
    var foo = context.Foos.Find(id);
    foo.Data = 2;
    context.SaveChanges(); //Crash here
}

С DbEntityValidationException . В EntityValidationErrors содержится сообщение . Поле Bar является обязательным. .

Однако, если я принудительно загрузю свойство Bar , добавив следующую строку перед SaveChanges :

var bar = foo.Bar;

Все работает нормально. Это также работает, если я удалю атрибут [Required] .

Это действительно ожидаемое поведение? Существуют ли какие-либо обходные пути (помимо загрузки каждой необходимой ссылки каждый раз, когда я хочу обновить объект)

69
задан Diego Mijelshon 18 May 2011 в 00:52
поделиться