【发布时间】:2012-08-03 12:19:11
【问题描述】:
我对实体框架非常陌生,所以我不知道其中使用的技术术语。我很抱歉我的英语不好。
我正在一个项目中工作,其中包含实体框架并有一个.edmx 文件。该文件包含在其中创建的实体。
所以我创建了 2 个实体并将其命名为 TableA 和 TableB。 pid 是 TableA 的实体键, cid 是 TableB 的实体键。 并在其中创建了多对一的关系。 即 TableA row1 可以有 TableB_cid=1 TableA row2 也可以有 TableB_cid=2
然后我做了“从模型生成数据库”
CREATE TABLE [TableA] (
[pid] nvarchar(max) NOT NULL,
[name] nvarchar(max) NOT NULL,
[TableB_cid] nvarchar(max) NOT NULL
);
GO
CREATE TABLE [TableB] (
[cid] nvarchar(max) NOT NULL,
[name] nvarchar(max) NOT NULL
);
pid|name|TableB_cid
--------------------
1 | a | 2
2 | b | 2
3 | c | 1
cid|name
------------
1 | s
2 | f
现在我在 C# 代码中写了这个,
TableA obj = repository.All().Single(w=>w.pid == "1")
context.Entry<TableA>(obj).Reference<TableB>(o => o.TableB).Load();
现在这将加载 cid=1 的 TableB(但我真正想要的是加载 cid=2 的 TableB)。
我认为它的主键与主键匹配,而不是 TableB_cid (TableA) 与 cid (TableB) 匹配。
所以我做错了什么请帮忙。
编辑:
简而言之,我正在寻找一种方法,可以在 Entity Framework 4.0 中添加表 A 的非主列与表 B 的主列的关联。
而且我不想使用 linq 查询和连接。我已经尝试过,但我无法在 edmx 文件中找到可以做到的方法或选项。
谢谢,
M
【问题讨论】:
-
repository是您的DbContext还是自定义服务层存储库?repository.All()返回什么? -
嗨,AJ。存储库是自定义服务并使用工作单元,
repository.All()返回IQueryable<Parent> -
您确定 Child_Cid 应该在 Parents 表中吗?如果一个父母可以有很多孩子,那么 Children 表应该有 [Parent_Pid],对吧?
-
嗨,富兰克林斯,我想我使用了错误的命名约定,所以现在我已经编辑了这个问题。
-
现在一切看起来都不错,对吗?
标签: c# linq entity-framework linq-to-entities edmx