首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用实体框架TPT的多个继承级别

使用实体框架TPT的多个继承级别
EN

Stack Overflow用户
提问于 2013-05-21 11:19:35
回答 1查看 1.6K关注 0票数 1

考虑下面的表模式:

我想使用实体框架Table-Per-Type (Fluent API)来映射到下面的类图:

我该怎么做呢?我尝试过像Microsoft站点上的示例那样做这件事,但是看起来没有一个示例涵盖两个深度继承场景,并且我得到了与无效的鉴别器列等相关的错误。我为每个类型使用一个EntityTypeConfiguration。如何指定下级联子节点的外键名称?

如果任何人有一个如何做这样的映射的例子,我将永远感激。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-05-21 12:22:36

因此,每种类型表不能很好地适用于您的模式,因为每种类型的表通过共享主键将表链接在一起。您可以修改您的模式,使UserAccounts、ExternalUserAccounts和SystemUserAccounts都以UserAccountId为关键字。那么下面的代码就接近你想要的了。否则,您将希望使用常规关联属性。

阅读有关每个类型的表here和共享主键here的信息。

代码语言:javascript
复制
    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);

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16661592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档