entity-framework - 我首先需要在 EF 核心代码中使用外键吗?
问题描述
我是实体框架中的代码新手并阅读关系,我看到每个人的做法都不同。这可能是因为早期版本,可能是相同的或可能是因为性能。
假设我有两张表公司和用户。
我会像这样设置公司与用户的关系:
public List<User> Users { get; set; } = new List<User>();
然后,如果我从用户到公司的角度需要找到公司,我会在 User 中有这个:
public Company Company { get; set; }
并执行此查询:
return await _clientContext.Users.Where(x => x.Company.Id == companyId).ToListAsync();
或者我可以有这个:
public int CompanyId { get; set; }
[ForeignKey("CompanyId")]
public Company Company { get; set; }
并有这个查询:
return await _clientContext.Users.Where(x => x.CompanyId == companyId).ToListAsync();
还有一些用关键字 virtual 来定义 Company,如下所示:
public virtual Company Company { get; set; }
我不确定每个场景是否都相同,并且执行 x.CompanyId 而不是 x.Company.Id 实际上是相同的。平时用什么?
解决方案
您的第二种情况正常使用。
IE
public int CompanyId { get; set; }
[ForeignKey("CompanyId")]
public Company Company { get; set; }
And have this query:
return await _clientContext.Users.Where(x => x.CompanyId == companyId).ToListAsync();
推荐阅读
- android - 在 android 模拟器上运行 linphone - 无法加载可选库 ffmpeg-linphone
- codeigniter - 我如何使用我的 Codeigniter API 使用电子
- python-3.6 - csvkit 库中的 csvsql 缺少包如何修复?
- python - 在循环中扩展变量的名称
- sql-server - 使用 GROUP BY 和 HAVING 从一个表选择到另一个表
- corda - 在corda中设置Multi-Notary
- asp.net - 将组件放在用户控件旁边
- jquery - 如何在jQuery中删除包裹在SELECT元素周围的DIV
- javascript - 谷歌图表 - 图表不改变选择
- azure - IEventProcessor 处理消息两次