【发布时间】:2011-09-11 19:10:27
【问题描述】:
我有这个现有的数据库模式,这意味着使用联合表的自引用多对多关系。 Location 表可能包含 Country、City、District、或 Area 信息到鉴别器字段。表 RelatedLocation 保存自引用关系。
我的领域模型如下,Location类是抽象类,每个继承的类都包含相关的导航属性。
public abstract class Location
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Country : Location
{
public virtual ICollection<District> Districts { get; set; }
}
public class District : Location
{
public virtual ICollection<Country> Countries { get; set; }
public virtual ICollection<City> Cities { get; set; }
}
public class City : Location
{
public virtual ICollection<District> Districts { get; set; }
public virtual ICollection<Area> Areas { get; set; }
}
public class Area : Location
{
public virtual ICollection<City> Cities { get; set; }
}
在 OnModelCreating 上,我使用以下方法来映射每个继承类的多对多关系
modelBuilder.Entity<Country>()
.HasMany(c => c.Districts)
.WithMany(d => d.Countries)
.Map(t => t.ToTable("RelatedLocations").MapLeftKey("ParentId").MapRightKey("RelatedId"));
modelBuilder.Entity<City>()
.HasMany(c => c.Districts)
.WithMany(d => d.Cities)
.Map(t => t.ToTable("RelatedLocations").MapLeftKey("ParentId").MapRightKey("RelatedId"));
在创建模型时,我收到并排除“每个 EntitySet 必须引用唯一的模式和表”,即 EF 多次抱怨将不同的关系映射到同一个表“RelatedLocaions” .
我不知道 EF4.1 不支持这种映射方式,或者我以错误的方式映射它!
【问题讨论】:
标签: entity-framework-4.1 ef-code-first