0

子クラスのプロパティを基本クラスのテーブルにマップすることは可能でしょうか。2つのクラスがあるとします(短縮):

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(タイプごとのテーブル)継承を使用しています(つまり、ユーザーと顧客の2つのテーブルを意味します)。何らかの理由で、ShopIdプロパティを User テーブルに配置したいのですが、Customerクラスの他のすべてのプロパティは Customer テーブルに配置します。それは可能ですか?

User テーブルに ShopId 列があると、たとえば Username と ShopId に一意のインデックスを作成できます (アプリケーションはマルチテナントであるため、グローバルに一意のユーザー名は必要なく、ショップ レベルの一意のユーザー名のみが必要です)。

4

1 に答える 1

0

これはあなたが探しているものですか?

UserBase.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...
}

Customer.cs

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

UserDbContext.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 に答える