【发布时间】:2013-11-11 13:38:10
【问题描述】:
假设我们的数据库中有两个表。
Table1 有字段:
Id
Field 2
Field 3
Table2 有字段:
Table1Id
Field 2
Field 3
现在 Table1 的 PK 是 Id,而 Table 2 的 PK 是 Table1ID(这是有道理的。)
Table1 可能有也可能没有与之相关的 Table2 实体。 (取决于Table1.Field2的值是否为3,但无论如何..)
我在 Table2 上设置了一个 FK,使得 Table1.Id 与 Table2.Table1Id 相关
我的最终目标是,当通过实体框架(顺便说一下,db-first)访问 Table1 时,我可以通过 Table1.Table2(应该为 null 或已填充)访问我的 Table2 实体。
现在,我必须执行 Table1.Table2s.First() 之类的操作
我缺少什么关系让这个 First() 不必要?
注意: 表 1 已经存在于我们的数据库中并被使用。表 2 是新事物的一部分。
这是我当前创建的 Table2 导致我的问题
CREATE TABLE Table2(
Table1Id NUMERIC(18, 0),
Field2 BIT NOT NULL,
Field3 BIT NOT NULL,
CONSTRAINT Table2_pk PRIMARY KEY (Table1Id ),
CONSTRAINT FK_Table1ID
FOREIGN KEY (Table1Id)
REFERENCES Table1(Id)
);
即使是陌生人,在 EDMX 中一切看起来都很好
此外,EDXM 文件的关联检查出多重性 1 和 0..1
编辑:
通过足够的笨拙,这行得通。我恢复了我的模型并从头开始/再次/建立了连接,它神奇地起作用。如果我弄清楚原因,我会尝试思考为什么会这样并进行编辑。
【问题讨论】:
-
你的模型的 C# 代码对于了解为什么你得到一个对象集合而不是单个对象是必要的
-
我只是在调用像 var test = dbcontext.Table1.First() [single entity] 这样的实体。然后稍后我要测试.Table2。所以真的只是 EF 输出的模型,只是一个普通的模型
-
问题不是调用代码...而是您在 EF 中配置实体的方式...您的模型有问题,而不是 SQL 或调用代码。
-
我不明白。如果模型是由 EF(顺便说一下,4.0)制作的,那不应该与我在 SQL 中的设置方式相对应吗?即使当我使用 Linqpad 玩东西时,它对情况的感知设置是它是一个 1..n,我仍然必须每次都使用 .First()。
-
您可以仔细检查 Table1 上“Table2”导航属性的“Multiplicity”设置吗?另外,你能深入到你的 Context.cs 并获取类定义 .cs 吗?
标签: c# sql sql-server entity-framework