0

我正在使用 TPC 继承将复杂对象模型映射到现有数据库。当我在继承结构的中间级别创建关系时遇到了问题。

public class ParentClass
{
}

public class MiddleClass : ParentClass
{
    public Int64 RelationshipId;
    public Relationship Relationship;
}

public class ChildClass1 : MiddleClass
{
}

public class ChildClass2: MiddleClass
{
}

public class Relationship
{
    public string RelationshipInfo { get; set; }
}

public class MyEntities : DbContext
{
    public DbSet<ParentClass> Parents
    public override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ChildClass1>.Map(m => m.MapInheritedProperties);
        modelBuilder.Entity<ChildClass2>.Map(m => m.MapInheritedProperties);

        modelBuilder.Entity<MiddleClass>.HasRequired(mc => mc.Relationship).WithMany().HasForeignKey(mc => mc.RelationshipId);
    }
}

在我添加该modelBuilder.Entity<MiddleClass>.HasRequired(mc => mc.Relationship).WithMany().HasForeignKey(mc => mc.RelationshipId);行之前,我的模型将一直有效。我必须将这种关系映射到每个孩子吗?

我收到的错误是“无法按照定义映射“MiddleClass”类型,因为它映射了使用实体拆分或其他形式继承的类型的继承属性。

4

1 回答 1

0

我在这里找到了答案(有点) 。基本答案是,由于任何继承的类都不表示为数据库中的表,因此您无法在这些表上创建关系。

即使尝试像这样通过父类映射继承的属性也行不通:

modelBuilder.Entity<ChildClass>()
            .HasRequired(cc => cc.Relationship).WithMany().HasForeignKey(cc => cc.RelationshipId);

它知道关系对象仍然是中间类“表”的一部分,并尝试将其映射到那里。似乎唯一的行动是在子类中拥有所有关系对象。

public class ParentClass
{
}

public class MiddleClass : ParentClass
{
    public Int64 RelationshipId;
    public Relationship Relationship;
}

public class ChildClass1 : MiddleClass
{
    public Int64 RelationshipId;
    public Relationship Relationship;
}

public class ChildClass2: MiddleClass
{
    public Int64 RelationshipId;
    public Relationship Relationship;
}

public class Relationship
{
    public string RelationshipInfo { get; set; }
}

这不是最好的解决方案,但您可能可以通过 EntityConfigurations 的继承结构进行映射。

于 2012-07-19T15:37:30.130 回答