实体框架6代码优先Fluent API表映射

山姆

我在现有数据库中有一个表,看起来像这样:

PK
FK
Col1
Col2
Col3
Col4
Col5

我需要将其放入这样的类层次结构中:

public abstract class BaseClass : Entity
{
    public int PK {get; set;}
    public string Col1 {get; set;}
}

public class Child1 : BaseClass
{
    public string Col2 {get; set;}
    public string Col3 {get; set;}
}

public class Child2 : BaseClass
{
    public string Col4 {get; set;}
    public string Col5 {get; set;}
}

我目前正在使用Fluent API来配置实体,如下所示:

public abstract class BaseClassConfig<TEntity> : EntityTypeConfiguration<TEntity> where TEntity : Entity
{
    public BaseClassConfig()
    {
        ToTable("TheTableName");
        HasKey(x => x.Id);

        Property(x => x.Col1).HasColumnName("SomeName");
    }
}

public class Child1Config : BaseClassConfig<Child1>
{
    public Child1Config()
    {
        Property(x => x.Col2).HasColumnName("SomeName");
        Property(x => x.Col3).HasColumnName("SomeName");
    }
}

public class Child2Config : BaseClassConfig<Child2>
{
    public Child2Config()
    {
        Property(x => x.Col4).HasColumnName("SomeName");
        Property(x => x.Col5).HasColumnName("SomeName");
    }
}

当我将它们添加到上下文中时,继承自DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new Child1Config());
    modelBuilder.Configurations.Add(new Child2Config());
}

我收到以下错误:

实体类型'Child1'和'Child2'无法共享表'TheTableName',因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系且它们之间具有匹配的主键。

我看了一下这篇文章:http : //www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-在asp-net-mvc应用程序中

但是,它并没有真正谈论使用fluent api配置类型,而是通过将它们直接添加到上下文中DbSet<>

如何使用流利的api设置单个表以通过基类映射到不同的类?

哑光测试仪

这篇MSDN文章对我有很多帮助:使用Fluent API配置/映射属性和类型

在其中,您将看到对每层表格(TPH)继承模式的引用。本质上,您缺少的是一个鉴别符字段(并且基于该错误,FK也未映射)。

默认情况下,discriminator列称为Discriminator,但是正如您从本文中看到的那样,可以在代码优先的映射中对其进行自定义:

modelBuilder.Entity<Course>()  
    .Map<Course>(m => m.Requires("Type").HasValue("Course"))  
    .Map<OnsiteCourse>(m => m.Requires("Type").HasValue("OnsiteCourse"));

在上面的示例中,Type是鉴别符,它使EF知道要实现的实体类型,即Course何时实体Type == "Course"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架6代码优先触发器

来自分类Dev

实体框架6代码优先-必需的Enum数据类型不起作用

来自分类Dev

实体框架6-代码优先:类命名空间中的表模式

来自分类Dev

EF6代码优先:使用Fluent API声明外键

来自分类Dev

实体框架代码优先-更改表名称

来自分类Dev

使用SQLite 3代码优先的Entity Framework 6-无法创建表

来自分类Dev

实体框架6代码优先-具有用户UserRole权限的多对多

来自分类Dev

访问/使用视图实体框架6代码优先方法

来自分类Dev

实体框架6代码优先迁移-多个生产分支

来自分类Dev

实体框架6代码优先自定义函数

来自分类Dev

实体框架6代码第一VarBinary映射或计算列中的长度

来自分类Dev

实体框架代码优先流利的api

来自分类Dev

实体框架6代码优先查找表未填充

来自分类Dev

C#-实体框架优先代码-将对象映射到两个表中

来自分类Dev

实体框架6代码优先而不是创建所有列

来自分类Dev

在实体框架6代码优先方法中在两个表之间创建一对多和多对一映射

来自分类Dev

使对动态表LINQ EF6代码优先的访问成为可能

来自分类Dev

EF5代码优先-数据注释与Fluent API

来自分类Dev

实体框架6代码优先的newid()

来自分类Dev

实体框架6代码优先触发器

来自分类Dev

实体框架5代码优先。如何指定我要删除的表?

来自分类Dev

访问/使用视图实体框架6代码优先方法

来自分类Dev

实体框架6代码优先-必需的Enum数据类型不起作用

来自分类Dev

实体框架代码优先Fluent API一对多

来自分类Dev

实体框架代码优先自动创建表

来自分类Dev

EF6代码优先:将参数传递给映射的删除存储过程

来自分类Dev

实体框架6代码优先中的自引用

来自分类Dev

实体框架 6 代码优先存储过程映射到复杂对象

来自分类Dev

实体框架 6 代码优先关系/表创建问题

Related 相关文章

  1. 1

    实体框架6代码优先触发器

  2. 2

    实体框架6代码优先-必需的Enum数据类型不起作用

  3. 3

    实体框架6-代码优先:类命名空间中的表模式

  4. 4

    EF6代码优先:使用Fluent API声明外键

  5. 5

    实体框架代码优先-更改表名称

  6. 6

    使用SQLite 3代码优先的Entity Framework 6-无法创建表

  7. 7

    实体框架6代码优先-具有用户UserRole权限的多对多

  8. 8

    访问/使用视图实体框架6代码优先方法

  9. 9

    实体框架6代码优先迁移-多个生产分支

  10. 10

    实体框架6代码优先自定义函数

  11. 11

    实体框架6代码第一VarBinary映射或计算列中的长度

  12. 12

    实体框架代码优先流利的api

  13. 13

    实体框架6代码优先查找表未填充

  14. 14

    C#-实体框架优先代码-将对象映射到两个表中

  15. 15

    实体框架6代码优先而不是创建所有列

  16. 16

    在实体框架6代码优先方法中在两个表之间创建一对多和多对一映射

  17. 17

    使对动态表LINQ EF6代码优先的访问成为可能

  18. 18

    EF5代码优先-数据注释与Fluent API

  19. 19

    实体框架6代码优先的newid()

  20. 20

    实体框架6代码优先触发器

  21. 21

    实体框架5代码优先。如何指定我要删除的表?

  22. 22

    访问/使用视图实体框架6代码优先方法

  23. 23

    实体框架6代码优先-必需的Enum数据类型不起作用

  24. 24

    实体框架代码优先Fluent API一对多

  25. 25

    实体框架代码优先自动创建表

  26. 26

    EF6代码优先:将参数传递给映射的删除存储过程

  27. 27

    实体框架6代码优先中的自引用

  28. 28

    实体框架 6 代码优先存储过程映射到复杂对象

  29. 29

    实体框架 6 代码优先关系/表创建问题

热门标签

归档