Nev*_*ane 4 c# navigation-properties entity-framework-core ef-fluent-api ef-core-2.0
我有一个实体User
,它有两个属性CreatedBy
并且UpdatedBy
都引用User
. 默认情况下,EF 假定这两者是一对一的关系。我收到以下错误消息:
消息:System.InvalidOperationException:无法确定在“User.CreatedBy”和“User.UpdatedBy”之间检测到的一对一关系的子/从属端。要识别关系的子/依赖方,请配置外键属性。如果这些导航不应该是同一关系的一部分,请在不指定反向的情况下配置它们。有关更多详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=724062。
目前,我有一个这样的课程:
public class User
{
public int Id { get; set; }
public int? CreatedById { get; set; }
public User CreatedBy { get; set; }
public int? UpdatedById { get; set; }
public User UpdatedBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基本上,这就是我正在尝试的:
CreatedBy
,任意数量的用户都可以拥有相同的UpdatedBy
。我怎样才能让 EF 忽略导航属性?我拥有的主要原因CreatedBy
是我Include(u => u.CreatedBy)
以后可以使用。我知道使用IEnumerable<User> AllCreatedUsers
属性可以解决这个问题,但我不想为IEnumerable
我的实体中的每个创建一个。有没有办法用流畅的 API 做到这一点?
这是我尝试过的:
modelBuilder.Entity<User>()
.Property<IEnumerable<User>>("AllCreatedUsers");
modelBuilder.Entity<User>().HasOne(u => u.CreatedBy)
.WithMany(u => EF.Property<IEnumerable<User>>(u, "AllCreatedUsers"));
Run Code Online (Sandbox Code Playgroud)
您需要使用无参数方法重载来配置两个单一导航属性关系WithMany
:
modelBuilder.Entity<User>()
.HasOne(u => u.CreatedBy)
.WithMany();
modelBuilder.Entity<User>()
.HasOne(u => u.UpdatedBy)
.WithMany();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6186 次 |
最近记录: |