1

考虑以下表模式:

在此处输入图像描述

我想使用 Entity Framework Table-Per-Type (Fluent API) 映射到以下类图:

在此处输入图像描述

我怎样才能做到这一点?我已经尝试像 Microsoft 站点上的示例那样进行操作,但似乎没有示例涵盖两深度继承场景,并且我收到与无效鉴别器列相关的错误等。我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 回答