首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有导航属性的外键值

没有导航属性的外键值
EN

Stack Overflow用户
提问于 2011-04-21 03:41:58
回答 3查看 604关注 0票数 0

是否可以在插入记录时手动分配外键值?

我不想使用TransactionScope或类似的构造。但我确实希望在调用SaveChanges()之前设置外键值。

例如:

代码语言:javascript
复制
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();
EN

回答 3

Stack Overflow用户

发布于 2011-04-21 03:59:55

是的,这是可能的,但你必须通过EntityReference分配它,这会带来很多麻烦:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2011-04-21 04:05:26

我不认为在你的例子中使用导航属性有任何问题。此外,不需要事务作用域,因为SaveChanges在内部使用事务。

理论上,如果您删除概念模型(EDMX designer)中的所有关联,并手动删除EDMX文件的SSDL部分中的所有关联,然后将FK映射到新的标量属性,您应该能够做到这一点。但是,EF的性能会大大降低,您甚至不应该使用它,而应该恢复到ADO.NET或Linq- to -sql。此外,一旦你接触到EDMX的SSDL部分,你就不能再使用从数据库更新了。

票数 0
EN

Stack Overflow用户

发布于 2011-05-13 23:55:27

如果你创建了一个新的实体,它将不会有一个ID,直到它被持久化。然后,你必须从数据库中检索它,并得到它的想法。在本例中,使用导航属性绝对是您的最佳选择。因此,不是:

代码语言:javascript
复制
y.EntityXID = x.ID;

您将使用

代码语言:javascript
复制
y.EntityX = x;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5735725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档