EF 6 Code First使用鉴别器和TPT映射现有数据库

时间:2013-11-06 14:34:46

标签: entity-framework ef-code-first

我有一个问题,我现在已经挣扎了一段时间。

鉴于数据库中存在以下现有表:

CREATE TABLE [dbo].[ModuleData] (
  ItemID INT NOT NULL,
  DataType INT NOT NULL,
  DataID  INT NOT NULL
);

CREATE TABLE [dbo].[Costs] ( -- DataType = 2
  CostID INT IDENTITY (1, 1) NOT NULL,
  Amount MONEY NOT NULL,
);

CREATE TABLE [dbo].[Actions] ( -- DataType = 4
  ActionID INT IDENTITY (1, 1) NOT NULL,
  Note NVARCHAR (1000) NULL,
);

我想将它们映射到以下类:

public class ModuleData
{
    public int ItemID {get; set;}
    public int DataID { get; set; }
    public int DataType { get; set; }
}

public class Cost:ModuleData
{
    public Cost()
    {
        //DataType = 2;
    }
    public int CostID {get; set;}
    public Double Amount {get; set;}
}

public class Action: ModuleData
{
    public Action()
    {
        //DataType = 4;
    }
    public int ActionID { get; set; }
    public String Note {get; set;}
}

使用DataType作为鉴别器,使用DataID作为密钥。

我的印象是,应该可以使用流畅的API,但我无法让它工作。

1 个答案:

答案 0 :(得分:0)

EntityTypeConfiguration<ModuleData>中,输入

Map<Cost>(m => m.Requires("DataType").HasValue(2));
Map<Action>(m => m.Requires("DataType").HasValue(4));

或在OnModelCreating

modelbuilder.Entity<ModuleData>()
    .Map<Cost>(m => m.Requires("DataType").HasValue(2))
    .Map<Action>(m => m.Requires("DataType").HasValue(4));

希望这有帮助!