EF反向POCO代码第一个生成器多对多关系指的是不存在的模型属性

时间:2014-12-12 15:01:53

标签: c# entity-framework

我们最近推出了一个表(Organization_XREF),它包含两个外键列(Parent_IDChild_ID),它们都引用组织中的同一主键列(OrganizationID)表:

table structure

当我们通过此关系运行EF Reverse POCO Code First Generator时,它会在Organization_Organization Configuration类中生成HasMany关系,如下所示:

HasMany(t => t.Organization_Organization).WithMany(t => t.Organization_Organization).Map(m => 
            {
                m.ToTable("Organization_XREF", schema);
                m.MapLeftKey("ChildId");
                m.MapRightKey("ParentId");
            });

此代码无法编译。编译器无法推断HasMany的参数类型,可能是因为没有为Organization_Organization模型生成Organization_Organization属性。

有没有其他人遇到过类似的问题?你是怎么解决这个问题的?这对我们来说是一个关键问题,因为它破坏了我们的API。

2 个答案:

答案 0 :(得分:2)

事实证明,这是产品的缺陷。该工具的作者(Simon Hughes)亲切地与我联系,让我知道问题已在v2.10.0中得到解决。

答案 1 :(得分:0)

不知道这是否有帮助,但看起来它将表识别为组织与其自身之间的链接表/关联表。

所以Organization_XREF不是'适当的'实体;它是许多导航属性的模型。

我希望将导航属性设置为像;

ICollection<Organization> Parents;
ICollection<Organization> Children;

还有一些关于Organization_XREF

Organization Parent;
Organization Child;

然后在模型构建过程中建立关系;

public class OrganizationXREFConfiguration : EntityTypeConfiguration<OrganizationXREF>
{
    public OrganizationXREFConfiguration()
    {
        ToTable("OrganizationXREF");
        HasRequired(ar => ar.Parent).WithMany(a => a.Parents);
        HasRequired(ar => ar.Child).WithMany(a => a.Children);
    }
}