C# 复合关键实体框架7“;无法将属性添加到实体类型

C# 复合关键实体框架7“;无法将属性添加到实体类型,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我正在尝试创建一个enity,用于管理组织中具有角色的用户的成员资格。我想限制一个用户在一个组织中只有一个成员资格。我通过创建一个复合键来实现这一点。但是,在尝试创建初始迁移时出现错误: InvalidOperationException:无法将属性“User”添加到实体类型“OrganizationLogin”,因为实体类型“OrganizationLogin”上已存在同名的导航属性 成员资格的实体 public class OrganizationLogin { public int

我正在尝试创建一个enity,用于管理组织中具有角色的用户的成员资格。我想限制一个用户在一个组织中只有一个成员资格。我通过创建一个复合键来实现这一点。但是,在尝试创建初始迁移时出现错误:

InvalidOperationException:无法将属性“User”添加到实体类型“OrganizationLogin”,因为实体类型“OrganizationLogin”上已存在同名的导航属性

成员资格的实体

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

}
我尝试在其中定义复合键的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});
        });

    }
}
公共类OmegaContext:IdentityDbContext { 公共数据库集日志{get;set;} 公共数据库集组织{get;set;} 公共数据库集组织登录名{get;set;} 公共数据库集组织角色{get;set;} 公共OmegaContext() { } 模型创建时受保护的覆盖无效(ModelBuilder) { builder.Entity(orgLogin=> { hasaAlternateKey(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});
        });

    }
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
建筑商实体(
orgUnit=>
{
orgUnit.HasOne(ou=>ou.Parent)
.有许多(ou=>ou.孩子)
.OnDelete(DeleteBehavior.Restrict)
.HasForeignKey(ou=>ou.ParentId);
});
builder.Entity(成员=>
{
hasaAlternateKey(m=>new{m.OrganizationUnitId,m.UserId});
});
}

我必须添加引用实体的ID

您应该添加包含
用户
组织
实体密钥的属性,并引用这些实体。请尝试使用
.HasForeignKey()
@Balázs这就是问题所在,谢谢@克拉科布森:我自己也面临着这个问题,你能在回答这篇文章时告诉我们最后的代码吗?@Martin我已经添加了对我有效的解决方案