我有以下遗留表格结构(此帖子已简化)
以下是我对配置实体的微弱尝试:
public class EntityConfiguration : EntityTypeConfiguration<Entity> {
public EntityConfiguration() {
ToTable("Entity");
HasKey(x => x.Id);
Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasMany(x => x.TypeOneUpdateBlacklist)
.WithMany()
.Map(x => {
x.ToTable("UpdateBlacklist");
x.MapLeftKey("EntityId");
x.MapRightKey("UpdateId");
});
HasMany(x => x.TypeTwoUpdateBlacklist)
.WithMany()
.Map(x => {
x.ToTable("UpdateBlacklist");
x.MapLeftKey("EntityId");
x.MapRightKey("UpdateId");
});
}
配置呈现此错误:
已定义具有架构'dbo'和表'UpdateBlacklist'的EntitySet'EntityBlacklistUpdate'。每个EntitySet都必须引用一个唯一的模式和表。
有没有配置这个?提前致谢
答案 0 :(得分:0)
您应该能够使用基本类型Update
创建多对多映射:
public class EntityConfiguration : EntityTypeConfiguration<Entity> {
public EntityConfiguration() {
ToTable("Entity");
HasKey(x => x.Id);
Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasMany(x => x.Updates)
.WithMany()
.Map(x => {
x.ToTable("UpdateBlacklist");
x.MapLeftKey("EntityId");
x.MapRightKey("UpdateId");
});
}
但是,要求您的班级Entity
只有基本类型的导航集合Updates
,而不是两个派生类型的两个导航集合。只有当数据库模式真正代表一个继承模型时才有可能,即给定的Update
行可以 具有相关的TypeOneUpdate
或 a TypeTwoUpdate
行,两者都不是两者。如果它可以同时具有这两者,则无法使用TPT进行映射,但您必须创建一对一的关系。