【发布时间】:2017-04-07 05:10:36
【问题描述】:
我有一个表层次结构,其中包含每个具体类型 (TPC) 映射的表。 (我不确定 [Key, Column] 属性是否必要,但根据https://stackoverflow.com/a/19792915/959779 它应该可以工作)
类结构:
public abstract class BaseEntity
{
[Key, Column(Order = 0)]
public int Id { get; set; }
}
public class Page: BaseEntity {
string Data { get; set; }
}
public class PageBackup: Page {
[Key, Column(Order = 1)]
public int PageId { get; set; }
public virtual Page Page { get; set; }
}
当Page 和PageBackup 实体的Id 相交时(在向表中添加一些项目后)EF 抛出下一个执行
“EntitySet 'EUICDataContext.Pages' 中的所有对象都必须具有唯一的主键。 但是,“Entities.PageBackup”类型的实例和类型的实例 'Entities.Page' 都具有相同的主键值,'EntitySet=Pages;Id=6'。 "
实体映射代码如下:
class PageMapping : EntityTypeConfiguration<Page>
{
public PageMapping ()
{
Map(m =>{ m.ToTable("Page"); });
HasKey(t => t.Id });
}
}
class PageBackupMapping : EntityTypeConfiguration<PageBackup>
{
public PageBackupMapping ()
{
Map(m =>{
m.MapInheritedProperties();
m.ToTable("PageBackup");
});
HasKey(t => new { t.Id, t.PageId });
}
}
问题是虽然在 EF PageMapping 有复合键 Update-Database 种子脚本创建具有下一个签名的表:
CREATE TABLE [dbo].[PageBackup](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PageId] [int] NOT NULL,
[Data] [nvarchar](max) NULL,
CONSTRAINT [PK_dbo.PageBackup] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
EF 是否允许使用复合键创建表(有很多映射示例,但我没有找到任何关于迁移的信息)?
以及如何代表TPC映射来描述这样的配置?
任何其他解决方案建议都会有所帮助。
【问题讨论】:
标签: c# entity-framework entity-framework-6 composite-key