【发布时间】:2016-12-17 00:11:32
【问题描述】:
使用 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 是否必要或有助于 EF 更好地在这两个表之间生成查询? - 除了通过代码导航之外,导航属性还有其他作用吗?
- 如果我没有指定关系的另一端,EF 是否会知道这个外键关系?
例如:
modelBuilder
.Entity<User>()
.ToTable("User")
.HasKey(o => o.Id)
.HasRequired(o => o.Type);
【问题讨论】:
标签: c# sql-server entity-framework linq foreign-keys