我对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文件中找到一种方法或选项,我可以做到这一点。
谢谢,
中号
答案 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.如果没有,你得到的是什么值?