コンポジットキーエンティティフレームワーク7 "プロパティをエンティティタイプに追加できません

c# entity-framework entity-framework-core

質問

私は、役割を持つ組織内のユーザーのメンバーシップを管理するエンティティを作成しようとしています。私は、1つの組織内に1つのメンバーシップしか持たないようにユーザーを制限したい。私は複合キーを作成してこれをやっています。しかし、私は最初の移行を作成しようとするとエラーが発生します:

InvalidOperationException:エンティティタイプ 'OrganizationLogin'に同じ名前のナビゲーションプロパティがすでに存在するため、プロパティ 'User'をエンティティタイプ 'OrganizationLogin'に追加できません。

メンバーシップのエンティティ

public class OrganizationLogin
{
    public int OrganizationLoginId { get; set; }
    public OrganizationRole Role { get; set; }
    public Organization Organization { get; set; }
    public OmegaUser User { get; set; } 

}

複合キーを定義しようとするMy DBContext:

public class OmegaContext : IdentityDbContext<OmegaUser,OmegaRole,int>
{
    public DbSet<Log> Logs { get; set; }
    public DbSet<Organization> Organizations { get; set; }
    public DbSet<OrganizationLogin> OrganizationLogins { get; set; }
    public DbSet<OrganizationRole> OrganizationRoles { get; set; }

    public OmegaContext()
    {

    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<OrganizationLogin>(orgLogin =>
        {
            orgLogin.HasAlternateKey(o => new {o.User, o.Organization});
        });

    }
}

OnModelCreatingコードを削除すると、移行が正常に作成されます。

編集:コメントで述べたように、問題は私がクラスを参照していた、エンティティのキ​​ーを持つプロパティではなかった

人気のある回答

要求通り、ここに私の解決策があります:

public class OrganizationUnitMember
{
    public int OrganizationUnitMemberId { get; set; }
    public int UserId { get; set; }
    public int OrganizationUnitId { get; set; }
    [ForeignKey("UserId")]
    public virtual OmegaUser User { get; set; }
    [ForeignKey("OrganizationUnitId")]
    public virtual OrganizationUnit OrganizationUnit { get; set; }
    public int RoleId { get; set; }
    [ForeignKey("RoleId")]
    public virtual OrganizationRole Role { get; set; }
}

そして、DbContext:

protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<OrganizationUnit>(
            orgUnit =>
            {
                orgUnit.HasOne(ou => ou.Parent)
                    .WithMany(ou => ou.Children)
                    .OnDelete(DeleteBehavior.Restrict)
                    .HasForeignKey(ou => ou.ParentId);
            });
        builder.Entity<OrganizationUnitMember>(member =>
        {
            member.HasAlternateKey(m => new {m.OrganizationUnitId, m.UserId});
        });

    }

参照されるエンティティのIDを追加する必要がありました



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ