插入记录时是否可以手动分配外键值?
我不想使用TransactionScope或类似的构造。但我确实想在调用SaveChanges()
之前设置foreignkey值例如:
EntityX x = new EntityX();
x.Name = "test";
ctx.AddToEntityX(x);
EntityY y = new EntityY();
y.Name = "Test";
y.EntityXID = x.ID; // <--- I want this. Not using a navigation property, but its 0.
ctx.AddToEntityY(y);
ctx.SaveChanges();
答案 0 :(得分:0)
是的,这是可能的,但你需要通过EntityReference分配它很多麻烦:
y.EntityXReference.EntityKey = new EntityKey("Enitites.YSet", "Id", x.id);
见EntityKey Constructor 有关参数的详细信息
有关其他参考,请参阅Tip 7 - How to fake Foreign Key Properties in .NET 3.5 SP1
答案 1 :(得分:0)
我没有看到在您的示例中使用导航属性有任何问题。此外,不需要事务范围,因为SaveChanges
在内部使用事务。
理论上,如果删除概念模型中的所有关联(EDMX设计器)并手动删除EDMX文件的SSDL部分中的所有关联,然后将FK映射到新的标量属性,您应该能够这样做。但是你会非常降低EF,甚至不应该使用它并恢复到ADO.NET或Linq-to-sql。此外,一旦您触摸EDMX的SSDL部分,就不能再使用从数据库更新了。
答案 2 :(得分:0)
如果您创建一个新实体,它将不会有ID,直到它被持久化。然后你必须从数据库中检索它并获得想法。在此示例中,使用导航属性绝对是您的最佳选择。所以而不是:
y.EntityXID = x.ID;
你会用
y.EntityX = x;