我有一个抽象的FileSystemItem类,它被映射到一个表(" FileSystemItem")和一个从它继承的File类,它被映射到另一个表(" File")。 然后使用延迟加载我将带有二进制数据的FileContents类添加到File,并将其映射到File表:
//The entities:
public abstract class FileSystemItem
{
public int Id { get; set; }
public string Name { get; set; }
}
public class File : FileSystemItem
{
public string FileInfo { get; set; }
public virtual FileContents Contents { get; set; }
}
public class FileContents
{
public int Id { get; set; }
public byte[] Contents { get; set; }
}
public class Context : DbContext
{
public DbSet<FileSystemItem> FileSystemItem { get; set; }
//creating the model with fluent api:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<FileSystemItem>().ToTable("FileSystemItem");
modelBuilder.Entity<File>().ToTable("File");
modelBuilder.Entity<FileContents>().ToTable("File");
modelBuilder.Entity<File>()
.HasRequired(f => f.Contents)
.WithRequiredPrincipal()
.WillCascadeOnDelete(false);
}
}
数据库是按预期创建的,但是当我尝试插入文件时会抛出此错误:
MappingException: (20,10):错误3033:从第20行开始映射片段的问题:EntitySets&#39; FileContents&#39;和&#39; FileSystemItem&#39;都被映射到表格&#39;文件&#39;。他们的主键可能会发生碰撞。
我做错了什么?