是否可以在插入记录时手动分配外键值?
我不想使用TransactionScope或类似的构造。但我确实希望在调用SaveChanges()之前设置外键值。
例如:
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();发布于 2011-04-21 03:59:55
是的,这是可能的,但你必须通过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
发布于 2011-04-21 04:05:26
我不认为在你的例子中使用导航属性有任何问题。此外,不需要事务作用域,因为SaveChanges在内部使用事务。
理论上,如果您删除概念模型(EDMX designer)中的所有关联,并手动删除EDMX文件的SSDL部分中的所有关联,然后将FK映射到新的标量属性,您应该能够做到这一点。但是,EF的性能会大大降低,您甚至不应该使用它,而应该恢复到ADO.NET或Linq- to -sql。此外,一旦你接触到EDMX的SSDL部分,你就不能再使用从数据库更新了。
发布于 2011-05-13 23:55:27
如果你创建了一个新的实体,它将不会有一个ID,直到它被持久化。然后,你必须从数据库中检索它,并得到它的想法。在本例中,使用导航属性绝对是您的最佳选择。因此,不是:
y.EntityXID = x.ID;您将使用
y.EntityX = x;https://stackoverflow.com/questions/5735725
复制相似问题