将Tenant添加到User类时,数据库迁移会添加新列Tenancy_Id

时间:2017-09-21 07:45:40

标签: angularjs aspnetboilerplate

我使用带有Angular,.NET Framework和Module Zero的样板模板。我已将租户添加到用户类和用户列表到租户类

public class Tenant : AbpTenant<User>
{
   public Tenant()
   {
     this.Users = new HashSet<User>();
   }
   public ICollection<User> Users { get; set; }

   public Tenant(string tenancyName, string name)
     : base(tenancyName, name)
   {
   }
}

public class User : AbpUser<User>
{
    public const string DefaultPassword = "123qwe";
    public virtual Tenant Tenant { get; set; }
    public static string CreateRandomPassword()
    {
        return Guid.NewGuid().ToString("N").Truncate(16);
    }

    public static User CreateTenantAdminUser(int tenantId, string emailAddress, string password)
    {
        var user = new User
        {
            TenantId = tenantId,
            UserName = AdminUserName,
            Name = AdminUserName,
            Surname = AdminUserName,
            EmailAddress = emailAddress,
            Password = new PasswordHasher().HashPassword(password)
        };

        return user;
    }
}

现在,当我添加迁移时,我得到了

public override void Up()
    {
        AddColumn("dbo.AbpUsers", "Tenant_Id", c => c.Int());
        CreateIndex("dbo.AbpUsers", "TenantId");
        CreateIndex("dbo.AbpUsers", "Tenant_Id");
        AddForeignKey("dbo.AbpUsers", "Tenant_Id", "dbo.AbpTenants", "Id");
        AddForeignKey("dbo.AbpUsers", "TenantId", "dbo.AbpTenants", "Id");
    }

为什么实体框架会创建另一个外键?我应该如何向Tenant添加用户列表?

1 个答案:

答案 0 :(得分:0)

我很惊讶您可以添加迁移。我试图重现时得到了这个:

  

无法确定导航属性&#39; User.Tenant&#39;所代表的关系。类型&#39;租户&#39;。手动配置关系,或使用&#39; [NotMapped]&#39;忽略此属性。属性或使用&#39; EntityTypeBuilder.Ignore&#39;在&#39; OnModelCreating&#39;。

我通过添加InverseProperty属性来实现它:

public class Tenant : AbpTenant<User>
{
    [InverseProperty("Tenant")]
    public ICollection<User> Users { get; set; }
}