我有一个实体“User”,有两个属性“CreatedBy”和“UpdatedBy”,它们都引用了“User”。默认情况下,EF假定这两个属性是彼此的一对一关系。我收到以下错误信息:
消息:System.InvalidOperationException:无法确定‘User.CreatedBy’和‘User.UpdatedBy’之间被依赖的一对一关系中哪一边是子/从属端。要识别关系的子/从属端,请配置外键属性。如果这些导航不应该成为同一关系的一部分,请在不指定逆变换的情况下进行配置。请参阅http://go.microsoft.com/fwlink/?LinkId=724062获取更多详细信息。
目前,我的代码如下:
消息: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; }
}
基本上,这是我正在尝试的:
- 创建和更新之间没有关系(不需要导航/反向属性)
- 任何数量的用户都可以拥有相同的
CreatedBy
,并且任何数量的用户都可以拥有相同的UpdatedBy
。
我如何要求 EF 忽略导航属性?我有 CreatedBy
的主要原因是我可以在以后使用 Include(u => u.CreatedBy)
。我知道使用 IEnumerable<User> AllCreatedUsers
属性可以解决这个问题,但我不想为实体中的每个属性创建一个 IEnumerable
。是否有一种使用 Fluent API 来解决这个问题的方法?
以下是我的尝试:
modelBuilder.Entity<User>()
.Property<IEnumerable<User>>("AllCreatedUsers");
modelBuilder.Entity<User>().HasOne(u => u.CreatedBy)
.WithMany(u => EF.Property<IEnumerable<User>>(u, "AllCreatedUsers"));
ForeignKey
。 - Neville NazeraneIEnumerable
,在一个类中拥有如此多未使用的属性是没有意义的。 - Neville NazeraneForeignKey
可以用了。上次可能只在一个属性上使用了fk
,但是现在在两个属性上都使用它就可以了。 - Neville Nazerane