在Entity框架中加载父实体中的子(非主键关联)

时间:2012-08-03 12:19:11

标签: c# linq entity-framework linq-to-entities edmx

我对Entity Framework很新,因此我不知道其中使用的技术术语。我很抱歉我的英语不好。

我正在一个项目中,该项目中包含实体框架并且有一个.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)匹配。

所以我做错了请帮助。

修改
总之,我正在寻找一种方法,我可以添加表A的非主要列与实体框架4.0中的表B的主列的关联。 而且我不想使用linq查询和连接。我试过,但我无法在edmx文件中找到一种方法或选项,我可以做到这一点。 enter image description here

enter image description here

enter image description here 谢谢,

中号

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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.如果没有,你得到的是什么值?