【发布时间】:2016-01-08 09:02:05
【问题描述】:
我正在尝试创建一个实体来管理具有角色的组织中用户的成员资格。我想限制用户在组织中只有一个成员资格。我通过创建一个复合键来做到这一点。但是,当我尝试创建初始迁移时出现错误:
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});
});
}
}
如果我删除 OnModelCreating 代码,则迁移创建成功。
编辑:正如 cmets 中所述,问题在于我引用的是类而不是具有实体键的属性
【问题讨论】:
-
您应该添加包含
User和Organization实体的键 的属性并引用它们。 -
试试
.HasForeignKey() -
@Balázs 这就是问题所在,谢谢!
-
@Kracobsen 能否请您在这篇文章的答案中向我们展示最终代码,因为我自己也面临着这个确切的问题。
-
@Martin 我添加了适合我的解决方案
标签: c# entity-framework entity-framework-core