1

EF4.3コードファーストと自動移行を使用しています。私は次の3つのクラスを持っています:

public class BaseUser
{
    [Key]
    [MaxLength(50)]
    public string Username { get; set; }

    [MaxLength(200)]
    public string Password { get; set; }
}

public class AdminUser : BaseUser
{
    public int SettingsFlag { get; set; }
}

public class RegularUser : BaseUser
{
    public DateTime LastLogin { get; set; }
    public DateTime LastSummary { get; set; }

    [MaxLength(100)]
    public string Email { get; set; }

    public int CompanyID { get; set; }
    public int ContactID { get; set; }
}

これでupdate-databaseを実行すると、TPH(Table-Per-Hierarchy)を使用して3つすべてに対して単一のテーブルが作成され、これらすべてのプロパティがマージされ、Discriminator列が追加されます。

最終的に3つのテーブルになるようにするにはどうすればよいですか?

4

2 に答える 2

2

流暢なAPIが必要な場合は、ToTable()メソッドを使用してTPTマッピングを作成できます。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<AdminUser>().ToTable("AdminUser");
    modelBuilder.Entity<RegularUser>().ToTable("RegularUser");
}
于 2012-03-26T18:01:26.697 に答える
2

トリックは非常に単純であることが判明しました。各テーブルに明示的に名前を付けると、FK リレーションシップの作成を含め、EF が独自に計算します。

[Table("BaseUser")]
public class BaseUser
...

[Table("AdminUser")]
public class AdminUser : BaseUser
...

[Table("RegularUser")]
public class RegularUser : BaseUser

これにより、意図したとおりに 1 対 1 の FK 結合を持つ 3 つのテーブルが取得されます。

于 2012-03-01T05:41:11.200 に答える