我想用EFCore.Postgres 2.1.2在dotnet core 2.1中编写控制台应用程序。
我在现有数据库中有两个表。每个表都有它自己的主键,但是这些表应该通过另一个字段-UserId
进行关联。
我的模特:
public class UserAddress
{
public int UserAddressId {get;set;}
public int UserId {get;set;}
public string City {get;set;}
public string Street {get; set;}
public virtual UserDetails UserDetails {get;set;}
}
public class UserDetails
{
public int UserDetailId {get;set;}
public int UserId {get;set;}
public string Name {get;set;}
public string Surname {get;set;}
}
如何通过UserId“教”实体框架加入这些表? 我想像下面那样使用它们
using (var MyDb = new GraffitiDbContext())
{
var query = MyDb.UserAddress
.Include(row => row.UserDetails);
foreach (var item in query)
{
Console.Writeline(item.UserDetails.Name);
}
}
答案 0 :(得分:0)
使用当前配置,您无法推断此联接,因为必须从UserAddress
到User
再到UserDetails
。您可以在UserAddress
和UserDetails
之间添加关系以使遍历成为可能,或者可以使用以下上下文导航:
context.UserAddress.Include(x => x.User).ThenInclude(x => x.UserDetails)
问题是User
可以有许多UserDetails
,因此当您在User
查询中包含UserAddress
时,很可能会得到很多记录
Address1 -> User1 -> UserDetail1
Address1 -> User1 -> UserDetail2