加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – EF DB第一次刷新未检测到特定表的FK

发布时间:2020-12-15 07:42:45 所属栏目:百科 来源:网络整理
导读:不知道我的设置发生了什么,但是最近,当我用新字段或具有特定表(Person)的外键的新表更新我的数据库时,我的数据库刷新选择了新字段,但是无法识别与人的FK关系.大多数其他表的外键工作正常. 可能缺少什么设置? 也许一条线索:Person充当其他几个表的基本类型,
不知道我的设置发生了什么,但是最近,当我用新字段或具有特定表(Person)的外键的新表更新我的数据库时,我的数据库刷新选择了新字段,但是无法识别与人的FK关系.大多数其他表的外键工作正常.

可能缺少什么设置?

也许一条线索:Person充当其他几个表的基本类型,例如:经理,客户等都具有名称,出生日期,性别等的基本特征,并且后代表具有也作为人的外键的主键.与子代表的FK关系也未被识别.

解决方法

映射复杂的继承模型时,实体框架可能相当有限.但是,在映射继承时,您基本上有三个选项:

TPH(每个层次结构的表)映射:此映射为层次结构中的所有字段生成单个表,并且冲突或“同名”字段将附加数字种子.例如Name1(Person),Name2(Manager)等.

TPT(table-per-type)mappping:此映射为每个对象生成单独的表,但是冲突的属性名称仅映射到基类中.在你的实例中是Person类.注意:由于复杂的连接查询以及在某些情况下您遇到的异常,不建议使用TPT

TPC(table-per-concrete-type)映射:类似于TPT,除了类的所有属性(包括继承的属性),映射到相应表的列

解:

假设您正在使用TPT,这意味着您的继承类成员未被映射.我建议您查看TPC以生成映射和迁移.您需要查看EF中的Fluent API以实现上述映射:

TPC示例:

在DbCOntext对象中声明:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>() 
        .Property(c => c.CourseID) 
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

        modelBuilder.Entity<Manager>().Map(m => 
        { 
            m.MapInheritedProperties(); 
            m.ToTable("Manager"); 
        }); 

        modelBuilder.Entity<Customer>().Map(m => 
        { 
           m.MapInheritedProperties(); 
           m.ToTable("Customer"); 
        });
    }

免责声明:如果没有看到继承结构或执行迁移,很难确切地知道您的问题是什么,但我发现EF关系中最常见的问题如上所述.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读