Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中加载父实体中的子实体(非主键关联)_C#_Linq_Entity Framework_Linq To Entities_Edmx - Fatal编程技术网

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

C# 在实体框架中加载父实体中的子实体(非主键关联),c#,linq,entity-framework,linq-to-entities,edmx,C#,Linq,Entity Framework,Linq To Entities,Edmx,我对实体框架非常陌生,所以我不知道其中使用的技术术语。我很抱歉我的英语不好 我在一个项目中工作,该项目中包含实体框架,并且有一个.edmx文件。该文件中创建了实体 因此,我创建了两个实体,并将其命名为TableA和TableB。 pid是表A的实体键,cid是表B的实体键。 并在其中建立了多对一的关系。 i、 e.表格A第1行可以有表格B_cid=1 表A第2行也可以有表B_cid=2 然后我做了“从模型生成数据库” 现在在我写的C代码中 TableA obj = repository.All(

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

我在一个项目中工作,该项目中包含实体框架,并且有一个
.edmx
文件。该文件中创建了实体

因此,我创建了两个实体,并将其命名为TableA和TableB。 pid是表A的实体键,cid是表B的实体键。 并在其中建立了多对一的关系。 i、 e.表格A第1行可以有表格B_cid=1 表A第2行也可以有表B_cid=2

然后我做了“从模型生成数据库”

现在在我写的C代码中

TableA obj = repository.All().Single(w=>w.pid == "1")
context.Entry<TableA>(obj).Reference<TableB>(o => o.TableB).Load();
TableA obj=repository.All().Single(w=>w.pid==“1”)
context.Entry(obj.Reference)(o=>o.TableB.Load();
现在,这将加载cid=1的TableB(但我实际上想要的是加载cid=2的TableB)

我认为它匹配主键和主键,而不是TableB_-cid(TableA)和cid(TableB)

所以我做错了什么,请帮助我

编辑:
简言之,我正在寻找一种方法,可以在EntityFramework4.0中添加表a的非主列与表B的主列的关联。 我不想使用linq查询和连接。我已经试过了,但是我在edmx文件中找不到一种方法或选项可以这样做。

谢谢

M


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

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

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

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

SecondTable.cid应为2,is和obj.pid应为1。如果没有,您将得到什么值?

但是由于某些原因,我无法使用linq查询。我想我在edmx中创建实体时缺少了一些设置。我不知道是什么。你添加了System.Linq名称空间吗?嗨,andre,请查看我的编辑。我不想使用linq查询,因为它不适合我的项目架构。也许下面的链接可以帮助你。您好,andre,我转到链接并应用了相同的逻辑,但它返回了相同的错误结果。
repository
是您的
DbContext
还是自定义服务层存储库?
repository.All()
返回什么?您好。repository是自定义服务,使用工作单元,并且
repository.All()
返回
IQueryable
您确定子Cid应该在Parents表中吗?如果一个家长可以有很多孩子,那么children表应该有[parent_Pid],对吗?嗨,franklins,我想我使用了错误的命名约定,所以现在我编辑了这个问题。现在一切看起来都很好,对吗?嗨,马克,我附上了快照。我试着给孩子装东西,但装错了孩子。我的意思是它使用TableA的主键,而不是TableB_cid。我已经根据您的新设置更新了我的帖子-这有帮助吗?我得到了
obj.TableB=null
我想这是由于延迟加载。我应该如何加载它?加载导航属性:obj.TableB.load();但是-我很好奇FK是什么-obj.TableB_cid==2吗?我附加了另一个快照,我无法检查obj.TableB_cid是什么,因为它不是obj的公共属性。
    var childs = from c in context.Children
                      where c.cid = o.Child_cid;
TableA obj = repository.All().Single(w=>w.pid == "1");
TableB SecondTable = obj.TableB;