C# 能否在实体框架中自定义自引用实体中的外键名称?
我的应用程序中的某些实体上有4个审核属性:C# 能否在实体框架中自定义自引用实体中的外键名称?,c#,.net,entity-framework,ef-code-first,entity-framework-6,C#,.net,Entity Framework,Ef Code First,Entity Framework 6,我的应用程序中的某些实体上有4个审核属性: public virtual DateTime WhenAdded { get; set; } public virtual DateTime? WhenUpdated { get; set; } public virtual User AddedBy { get; set; } public virtual User UpdatedBy { get; set; } 我使用代码优先的方法,并使用以下扩展方法映射用
public virtual DateTime WhenAdded { get; set; }
public virtual DateTime? WhenUpdated { get; set; }
public virtual User AddedBy { get; set; }
public virtual User UpdatedBy { get; set; }
我使用代码优先的方法,并使用以下扩展方法映射用户属性:
public static void MapAuditFields<T>(this EntityTypeConfiguration<T> configuration) where T : class, IAuditable
{
configuration.HasOptional<User>(e => e.AddedBy)
.WithOptionalDependent()
.Map(a => a.MapKey("AddedByUserId"));
configuration.HasOptional<User>(e => e.UpdatedBy)
.WithOptionalDependent()
.Map(a => a.MapKey("UpdatedByUserId"));
}
公共静态void MapAuditFields(此EntityTypeConfiguration配置),其中T:class,IAAuditable
{
configuration.has可选(e=>e.AddedBy)
.WithOptionalDependent()
.Map(a=>a.MapKey(“AddedByUserId”);
has可选(e=>e.UpdatedBy)
.WithOptionalDependent()
.Map(a=>a.MapKey(“UpdatedByUserId”);
}
这在大多数情况下都可以很好地工作,但在用户类上却不行,用户类本身当然有递归关系。我在互联网上看到过很多帖子,都认为在这种情况下,当您试图自定义联接表列名时,entity framework有一个bug,例如:
及
我得到的错误是“序列包含多个匹配元素”
有人知道EntityFramework6中是否已修复了此问题吗
非常感谢。使用with Many()
而不是with optional dependent()
,因为用户可以添加或更新多个其他用户
类别:
public class User
{
public int Id { get; set; }
public virtual User AddedBy { get; set; }
public virtual User UpdatedBy { get; set; }
}
Fluent API调用:
modelBuilder.Entity<User>()
.HasOptional( u => u.AddedBy )
.WithMany()
.Map( fkamc => fkamc.MapKey( "AddedByUserId" ) );
modelBuilder.Entity<User>()
.HasOptional( u => u.UpdatedBy )
.WithMany()
.Map( fkamc => fkamc.MapKey( "UpdatedByUserId" ) );
modelBuilder.Entity()
.has可选(u=>u.AddedBy)
.有很多
.Map(fkamc=>fkamc.MapKey(“AddedByUserId”);
modelBuilder.Entity()
.has可选(u=>u.updateBy)
.有很多
.Map(fkamc=>fkamc.MapKey(“UpdatedByUserId”);
结果:
非常感谢您的回答,但不幸的是,这会产生同样的错误。好吧,嗯,奇怪。你能分享一下你是如何在其他实体上映射审计字段的吗?我只是把它作为一个演示放在一起;我没有其他的实体来做这个,我在这里有非常奇怪的行为。这是项目的开始,所以我只有2个实体,用户和地址。我刚刚从Address中删除了审计列,仍然无法使您的解决方案工作,但我的原始映射工作正常。当我将审计列重新添加到Address时,我再次得到原始错误。我现在认为这与递归关系无关。每当我使用已发布的映射代码将2个实体与审核列映射时,都会引发“”序列包含多个匹配元素“”错误。感谢您的帮助。我猜我可能应该启动另一个线程。