使用 EntityFramework,我很好奇当您指定外键的两端与仅指定一个时是否有性能提升。假设我有一个被大多数其他表使用的表,例如查找表。假设此表 LookupValue
有 20 个传入外键,而另一个表 User
通过 TypeId 列位于其中一个外键的另一端
。
LookupValue
------------------
Id INT <--\
Values NVARCHAR |
|
User | FK_User_NameValue
------------------ |
Id INT |
TypeId INT <--/
使用代码优先,我将这些表定义如下:
modelBuilder
.Entity<LookupValue>()
.ToTable("LookupValue")
.HasKey(o => o.Id);
modelBuilder
.Entity<User>()
.ToTable("User")
.HasKey(o => o.Id)
.HasRequired(o => o.Type)
.WithMany(o => o.UsersOfThisType)
.HasForeignKey(o => o.TypeId);
我的问题是...
WithMany...HasForeignKey
部分对 EF 是否必要或有帮助,以便更好地在这两个表之间生成查询?例如:
modelBuilder
.Entity<User>()
.ToTable("User")
.HasKey(o => o.Id)
.HasRequired(o => o.Type);
最佳答案
只要只需要从User遍历到LookupValue,User中的accessor属性就可以了。如果不需要查找引用 LookupValue 的所有用户,则无需在 LookupValue 对象中包含 ICollection
public class LookupValue
{
public int Id { get; set; }
public string Value { get; set; }
}
public class User
{
public int Id { get; set; }
public int TypeId { get; set; }
public LookupValue Type { get; set; }
}
Entity Framework 将通过 Users 中的 TypeId 属性生成一个从 Users 到 LookupValues 的外键。我认为这就是从 Users 到 LookupValue 的高效遍历所需的全部内容。
https://stackoverflow.com/questions/38876291/
相关文章:
google-maps - 谷歌地图 -> 根据给定距离制作环形路线?
mysql - 如何匹配两个表之间varchar字段中的字符串
python - 在 Python 中查找对称矩阵的 SVD
maven - 如何配置 pom.xml 文件以使用 Nexus Repository manage
makefile - GNU make - 在另一个 makefile 中引用目标
android - firebase 重复用户名和自定义登录
python - 冲突的 OpenCV 和 Matplotlib
php - 模拟 Controller 从 WebTestCase 调用的服务