1

次のテーブル スキーマを考慮します。

ここに画像の説明を入力

Entity Framework Table-Per-Type (Fluent API) を使用して、次のクラス ダイアグラムにマップしたいと考えています。

ここに画像の説明を入力

これどうやってするの?Microsoft サイトの例のように試してみましたが、2 層の継承シナリオをカバーする例がないように見え、無効な​​識別子列などに関連するエラーが発生します。1種類につき1本使用していEntityTypeConfigurationます。子をカスケードする外部キーの名前を指定するにはどうすればよいですか?

誰かがそのようなマッピングを行う方法の例を持っていれば、私は永遠に感謝します.

ありがとう!

4

1 に答える 1

0

タイプごとのテーブルは共有主キーを介してテーブルをリンクするため、タイプごとのテーブルはスキーマではうまく機能しません。UserAccounts、ExternalUserAccounts、および SystemUserAccounts がすべて UserAccountId をキーとするように、スキーマを変更できます。次に、以下のコードはあなたが望むものに近いです。それ以外の場合は、通常の関連付けプロパティを使用する必要があります。

タイプごとのテーブルについてはこちら、共有主キーについてはこちらをお読みください。

    public class UserAccount
    {
        public int UserAccountId {get;set;}
        public int UserId {get;set;}
        public DateTime LastLogin {get;set;}
        public bool IsLocked {get;set;}
        public bool IsActive {get;set;}
        public User User {get;set;}
    }

    public class ExternalUserAccount : UserAccount
    {
        public int ExternalAccountId {get;set;}
        public string ProviderName {get;set;}
        public string ProviderUserName {get;set;}
    }

    public class SystemUserAccount : UserAccount
    {
        public int SystemUserAccountId {get;set;}
        public string PasswordHash {get;set;}
        public string Token {get;set;}
    }

    public class User
    {
        public int UserId {get;set;}
        public string Name {get;set;}
        public string Description {get;set;}
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserAccount>().ToTable("UserAccounts");
        modelBuilder.Entity<UserAccount>().HasKey(ua => ua.UserAccountId);
        modelBuilder.Entity<UserAccount>().HasRequired(ua => ua.User)
                                          .WithMany()
                                          .HasForeignKey(ua => ua.UserId);
        modelBuilder.Entity<ExternalUserAccount>().ToTable("ExternalUserAccounts");
        modelBuilder.Entity<SystemUserAccount>().ToTable("SystemUserAccounts");
        modelBuilder.Entity<User>().ToTable("Users");
        modelBuilder.Entity<User>().HasKey(u => u.UserId);

    }
于 2013-05-21T04:22:35.860 に答える