0

我对实体框架非常陌生,所以我不知道其中使用的技术术语。我很抱歉我的英语不好。

我正在一个项目中工作,其中包含实体框架并有一个.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 文件中找到可以做到的方法或选项。 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述 谢谢,

4

2 回答 2

0
    var childs = from c in context.Children
                      where c.cid = o.Child_cid;

我认为这应该对你有所帮助。

于 2012-08-03T12:31:34.450 回答
0

我不确定我是否理解这个问题,但在您的示例中,您是否只是尝试访问 ID 为 1 的 TableA 的 TableB 实体?

如果是这样,这个怎么样:

TableA obj = repository.All().Single(w=>w.pid == "1");
TableB SecondTable = obj.TableB;

SecondTable.cid 应该是 2,is 和 obj.pid 应该是 1。如果不是,你得到什么值?

于 2012-08-04T04:25:19.917 回答