EF: Falha na validação na atualização ao usar as propriedades necessárias carregadas preguiçosamente
Dado este modelo extremamente simples:
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; }
}
O seguinte programa falha:
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
}
Com umDbEntityValidationException
. A mensagem encontrada emEntityValidationErrors
éO campo Bar é obrigatóri.
No entanto, se eu forçar o carregamento doBar
adicionando a seguinte linha antes deSaveChanges
:
var bar = foo.Bar;
Tudo funciona bem. Isso também funciona se eu remover o[Required]
attribute.
Este é realmente o comportamento esperado? Existem soluções alternativas (além de carregar todas as referências necessárias sempre que eu quiser atualizar uma entidade)