2011-04-13 59 views
0

我使用的EntityFramework,并在我的EDMX文件我制订两个表:如何获取父实体密钥?

客户 柱: 编号PK

和订单 列: 编号PK 客户编号FK其相关

当我拿Order对象有IS Customer属性但我看不到CustomerId属性。 我曾经使用L2SQL,我期望看到CustomerId但EF以某种方式隐藏它。

+0

请注意,有和没有外键属性的关系处理方式不同:http://stackoverflow.com/questions/5281974/code-first-independent-associations-vs-foreign-key-associations/5282275#5282275 – 2011-04-13 17:41:39

回答

2

EF edmx设计器中的添加关联对话框允许您指定(通过复选框)是否要为关联创建“外键”(和/或导航属性)。你确定它被检查了吗?

+1

我也只是写这个;)现在我只粘贴链接,我仍然在我的剪贴板中的评论在这里:http:// blogs.msdn.com/b/msdnforum/archive/2010/05/07/foreign-key-association-in-entity-framework-4.aspx VS2010中有一个向导截图。值得注意的是,这是EF 4选项,不适用EF 1(.NET 3.5SP1)。 – Slauma 2011-04-13 14:45:42

+0

我无法检查它:此功能在目标框架中不可用...(3.5) – jlp 2011-04-13 14:48:33

+0

@jpl:的确,它在EF 1(.NET 3.5)中不存在。您必须先加载客户才能获得外键。如果可以,也可以升级到.NET 4。 – Slauma 2011-04-13 14:50:27

0

在Customer属性中,应该有一个CustomerId属性。

所以尽量..

myOrderObject.Customer.CustomerId 
+0

这可能会强制EF加载客户对象(如果您启用了延迟加载)。如果你只想要ID,这可能是一个坏主意...... – MartinStettner 2011-04-13 14:31:11

+0

我不能使用myOrderObject.Customer.CustomerId,因为myOrderObject.Customer可以为null(是!) – jlp 2011-04-13 14:38:11

+0

然后添加一个空检查。如果它不为空,请使用该对象。 – Travyguy9 2011-04-13 14:39:48

0

究竟是如何在顺序表中的id列命名?通常EF-Designer应该为数据库表中的每一列创建一个属性。查看“映射详细信息”页面(您可以在EF设计器的上下文菜单中打开该页面)以查看该列是否映射(以及属性)。

+0

我编辑我的问题 - 列肯定是映射 – jlp 2011-04-13 14:39:54