0

我想知道是否可以将子类属性映射到基类表。假设我有两个课程(缩短):

public abstract class User
{
    [Key]
    public int UserId { get; set; }

    public string Username { get; set; }

    // other properties...
}

public class Customer : User
{
    public int ShopId { get; set; }

    public virtual Shop Shop { get; set; }

    // other properties...
}

我正在使用 TPT(每种类型的表)继承(这意味着两个表 - 用户和客户)。由于某些原因,我希望ShopId在 User 表中拥有该属性,但Customer在 Customer 表中拥有来自类的所有其他属性。这甚至可能吗?

例如,在 User 表中拥有 ShopId 列将允许我们在 Username 和 ShopId 上创建唯一索引(该应用程序是多租户的,因此我们不需要全局唯一的用户名,只需要商店级别的唯一用户名)。

4

1 回答 1

0

这是你要找的吗?

用户库.cs

public abstract class UserBase
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public int ShopId { get; set; }
    public virtual Shop Shop { get; set; }
}

用户.cs

public class User : UserBase
{
    // user specific properties...
}

客户.cs

public class Customer : UserBase
{
    // customer specific properties...
}

用户数据库上下文.cs

public class UserDbContext : DbContext
{
    ...

    protected override OnModelCreating(DbModelBuilder modelBuilder)
    {
        // if you want users and customers to be shop specific
        modelBuilder.Entity<UserBase>.HasKey(x => new { x.UserId, x.ShopId });

        // if you only want users to be shop specific uncomment below and remove above
        //modelBuilder.Entity<User>.HasKey(x => new { x.UserId, x.ShopId });
    }
}
于 2013-08-01T01:53:04.623 回答