Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 能否在实体框架中自定义自引用实体中的外键名称?_C#_.net_Entity Framework_Ef Code First_Entity Framework 6 - Fatal编程技术网

C# 能否在实体框架中自定义自引用实体中的外键名称?

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; } 我使用代码优先的方法,并使用以下扩展方法映射用

我的应用程序中的某些实体上有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 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个实体与审核列映射时,都会引发“”序列包含多个匹配元素“”错误。感谢您的帮助。我猜我可能应该启动另一个线程。