首页 > 解决方案 > 我首先需要在 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 实际上是相同的。平时用什么?

标签: entity-frameworkentity-framework-core

解决方案


您的第二种情况正常使用。

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();

推荐阅读