给定这个极其简单的模型:
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
中找到的消息是栏字段是必填项。
但是,如果我通过在SaveChanges
之前添加以下行来强制加载Bar
属性
var bar = foo.Bar;
一切都很好。如果我删除了[Required]
属性,这也是有效的。
这真的是预期的行为吗?有没有什么变通的方法(除了每次我想要更新一个实体时加载每一个需要的引用)
https://stackoverflow.com/questions/6038541
复制相似问题