使用实体框架与SQL Server多对多关系



不知道如何使用这里显示东西的高级功能,所以请原谅;-)

数据库结构为

User --> UserOwnerR <-- Owner

我也有几个支持结构(例如属于特定所有者的地址)。

我需要找到一个特定用户可以访问的所有地址,因为它属于一个/多个所有者,但是不是地址,用户与之有所有者关系。

在EF Core 5+中,n:m关系不需要连接表就可以实现。

public class User
{
// user properties 
public IEnumerable<Owner> Owners { get; set; }
}
public class Owner
{
// owner properties
public IEnumerable<User> Users { get; set; }
}

您没有指定您是使用代码优先的方法(您基于c#类生成您的Schema)还是数据库优先的方法(从数据库表生成c#类)还是这些都不使用(手动设置您的实体)

如果您能够手动更改类,则可以添加导航属性。这些可能看起来像这样:

public class User
{
// whatever 
public IEnumerable<UserOwnerR> userOwners { get; set; }
}
public class Owner
{
// whatever
public IEnumerable<UserOwnerR> userOwners { get; set; }
}
public class UserOwnerR
{
public virtual Owner owner { get; set; }
public virtual User user { get; set; }
}

现在您可以在连接这些表时放置条件。在linq中使用基于sql语法的查询选项,因为这样更容易连接表。你可能想看看实体框架连接3个表来构建你的个人查询。

最新更新