我遇到了以下“问题”(它可能只是一个功能,但这将是一个很奇怪的功能)。使用 Entity Framework 5,当插入实体而不通过外键指定链接实体时,EF 会自动将值分配给相关实体(如果同时插入。
好吧,这不是很清楚,所以这里有一些重现行为的代码:
[TestClass]
public class TestEntityFramework
{
[TestMethod]
public void Test()
{
using (var context = new TestDataContext())
{
context.Foos.Add(new Foo { FooProp = "FooProp"});
context.Bars.Add(new Bar {BarProp = "BarProp"});
context.SaveChanges();
}
}
}
public class Foo
{
[Key]
public int Id { get; set; }
public string FooProp { get; set; }
}
public class Bar
{
[Key]
public int Id { get; set; }
public int FooId { get; set; }
[ForeignKey("FooId")]
public virtual Foo Foo { get; set; }
public string BarProp { get; set; }
}
public class TestDataContext : DbContext
{
public virtual IDbSet<Foo> Foos { get; set; }
public virtual IDbSet<Bar> Bars { get; set; }
}
测试方法出奇地有效,没有冲突。
即使我没有指定,插入的 Bar 实体也会链接到同时插入的 Foo 实体。
但是,以下代码都引发了外键异常:
[TestMethod]
public void Test()
{
using (var context = new TestDataContext())
{
context.Foos.Add(new Foo { FooProp = "FooProp"});
context.SaveChanges();
context.Bars.Add(new Bar {BarProp = "BarProp"});
context.SaveChanges();
}
}
[TestMethod]
public void Test2()
{
using (var context = new TestDataContext())
{
context.Foos.Add(new Foo { FooProp = "FooProp" });
context.Foos.Add(new Foo { FooProp = "FooProp2" });
context.Bars.Add(new Bar { BarProp = "BarProp" });
context.SaveChanges();
}
}
任何人都知道这种行为是否是预期的?有什么想法吗 ?
谢谢