C# 具有抽象泛型基类的实体框架6每类型代码第一个表(TBT)-列错误无效
我有以下数据库表:C# 具有抽象泛型基类的实体框架6每类型代码第一个表(TBT)-列错误无效,c#,generics,entity-framework-6,code-first,table-per-type,C#,Generics,Entity Framework 6,Code First,Table Per Type,我有以下数据库表: CREATE TABLE [dbo].[Batches] ( [Id] INT IDENTITY (1, 1) NOT NULL, [BatchTypeId] INT NOT NULL, [CreatedDate] DATETIME NOT NULL, [CreatedBy] VARCHAR (100) NOT NULL, CONSTRAINT [PK_Batche
CREATE TABLE [dbo].[Batches] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[BatchTypeId] INT NOT NULL,
[CreatedDate] DATETIME NOT NULL,
[CreatedBy] VARCHAR (100) NOT NULL,
CONSTRAINT [PK_Batches] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Batches_BatchTypes] FOREIGN KEY ([BatchTypeId]) REFERENCES [dbo].[BatchTypes] ([BatchTypeId])
);
CREATE TABLE [dbo].[PayrollDiscrepancyBatches]
(
[Id] INT NOT NULL
CONSTRAINT PK_PayrollDiscrepancyBatches_Batches PRIMARY KEY (Id),
CONSTRAINT FK_PayrollDiscrepancyBatches_Batches FOREIGN KEY (Id) REFERENCES Batches (Id)
)
我正在尝试使批处理
实体对象成为通用对象。以下是我为批处理
类准备的内容:
public abstract class Batch<TBatchRequest, TBatchSummary>
where TBatchRequest : BatchRequest
where TBatchSummary : BatchSummary {
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public BatchTypeEnum BatchTypeId { get; set; }
public DateTime CreatedDate { get; set; }
[StringLength(100), Required]
public string CreatedBy { get; set; }
public virtual ICollection<TBatchSummary> Summaries { get; set; } = new List<TBatchSummary>();
public virtual ICollection<TBatchRequest> Requests { get; set; } = new List<TBatchRequest>();
public virtual ICollection<BatchExport> Exports { get; set; } = new List<BatchExport>();
}
从错误消息中显示的无效列数来看,EF似乎将此关系视为每种具体类型的表。考虑到这一点,我在重写的OnModelCreating
方法中添加了以下内容:
modelBuilder.Entity<PayrollDiscrepancyBatch>()
.Map(m => m.MapInheritedProperties().ToTable("Batches"))
.HasKey(m => m.Id);
在这一点上,我不知所措。我的基类是泛型的这一事实是否导致了我的问题?如果是这样的话,有人知道如何解决这个问题吗?也许我需要另一个表,batchbase
,它将是一个抽象的非泛型的类,它是Batches
继承的
任何洞察都将不胜感激
public virtual DbSet<PayrollDiscrepancyBatch> PayrollDiscrepancyBatches { get; set; }
Message: Invalid column name 'PayrollDiscrepancyBatch_Id'.
Invalid column name 'BatchTypeId'. Invalid column name 'CreatedDate'.
Invalid column name 'CreatedBy'. Invalid column name
'PayrollDiscrepancyBatch_Id'.
modelBuilder.Entity<PayrollDiscrepancyBatch>()
.Map(m => m.MapInheritedProperties().ToTable("Batches"))
.HasKey(m => m.Id);
Invalid column name 'PayrollDiscrepancyBatch_Id'