c# - 多对多自我参考
问题描述
一个用户可以管理多个公司。并且用户可以从许多公司的列表中一次拥有一个活跃的公司。我怎样才能做到这一点?
我目前的模型是:
public class User
{
public int Id
public virtual ICollection<Company> Companies { get; set; }
public User()
{
this.Companies = new HashSet<Company>();
}
}
public class Company
{
public int Id
public virtual ICollection<User> Users { get; set; }
public User()
{
this.Users = new HashSet<User>();
}
}
如果我添加另一个注释:
public class User
{
public int CompanyId
public virtual Company Company { get; set; }
}
该模型不会引用多对多表哪个UserCompany
表。
我怎样才能做到这一点?或者这种情况有另一种方法吗?
现在我正在考虑制作手动多对多关系模型并添加另一个ActiveCompany
从自定义多对多关系引用的字段。这是好方法吗?
解决方案
我很确定你可以通过使用流利的 api 并覆盖OnModelCreating
你的方法来做到这一点DbContext
,但我没有一个例子。
但是,您可能会发现为您的用户添加另一个属性更容易
public int ActiveCompanyId { get; set; }
有很多变量,例如您是否使用延迟加载、有多少公司/用户、您的数据访问模式是什么,这可能会决定您的最佳整体方法。如果您的Companies
属性通常或总是填充,那么您可以创建一个get
未映射的唯一属性:
public class User
{
public int Id
public virtual ICollection<Company> Companies { get; set; }
public int ActiveCompanyId { get; set; }
[NotMapped]
public Company ActiveCompany
{
get
{
return this.Companys == null ? null :
Companies.Where(x => x.Id == this.Active.CompanyId)
.SingleOrDefault;
}
}
public User()
{
this.Companies = new HashSet<Company>();
}
}
推荐阅读
- ios - 在 Swift 中,单例和全局 let 变量有什么区别?
- javascript - JS 树上下文菜单插件
- c# - NEST 匹配查询问题
- c# - 尝试下载 MNIST 时出现 C#、Accord、FileNotFoundException
- html - CSS 变量到 SASS 变量 = 不透明度函数的问题
- android - ViewPager 中的 SetCurrentItem() 在第一次滚动时不平滑
- sql - SQL - 基于条件的 SUM 值
- url - MkDocs 无法与自定义 URL 路径一起正常工作
- python - 如何在不查看 XML 中的数据的情况下查看 XML 的问题
- java - 使用java运行python