实体框架中的每种类型Fluent映射表

时间:2014-07-30 21:51:21

标签: c# .net entity-framework entity-framework-4

使用Entity Framework我可以将相关表映射为类继承,并且有三种不同的方法来表示继承层次结构(weblogs):

  • 每个层次结构的表(TPH)
  • 每种类型的表格(TPT)
  • 每个混凝土类别(TPC)表

网站mscblogs对这些方法中的每一种都有一个很好的解释。

我试图了解如何使用方法TPT(每种类型的表)映射我的表,但与mscblogs的示例不同,我需要为流畅的编程执行映射,如:

using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

public class BillingDetailMap : EntityTypeConfiguration<BillingDetailEntity>
{
    public BillingDetailMap()
    {
        // ...
        this.Property(t => t.Number).HasColumnName("Number");
        // ...
    }    
}

// ...

我正在寻找几个小时,但我找不到任何东西。我找到了许多示例,如何使用diagramattributesothers来完成此操作,但是没有任何流畅的api。

如何在Entity Framework 4.1 Fluent API中映射TPT?

1 个答案:

答案 0 :(得分:3)

映射每个类型的表(TPT)继承

  

在TPT映射方案中,所有类型都映射到个人   表。仅属于基本类型或派生类型的属性   存储在映射到该类型的表中。映射到的表   派生类型还存储连接派生表的外键   与基表。

modelBuilder.Entity<Course>().ToTable("Course");  
modelBuilder.Entity<OnsiteCourse>().ToTable("OnsiteCourse");

Source

在上一个问题上同时检查my answer,希望它有所帮助。

更新完整示例

public class AppContext : DbContext
{
    public DbSet<Item> Items { get; set; } // --> this dbset is required for TPT, if removed it will become TPCC
    public DbSet<Food> Books { get; set; }
    public DbSet<Book> Foods { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ItemMap());
        modelBuilder.Configurations.Add(new BookMap());
    }
}
public class ItemMap : EntityTypeConfiguration<Food>
{
    public ItemMap()
    {
        ToTable("Foods");
    }
}
public class BookMap : EntityTypeConfiguration<Book>
{
    public BookMap()
    {
        ToTable("Books");
    }
}
public abstract class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class Food : Item { }
public class Book : Item { }