0

我正在尝试实现固有的组表的各种表。当我从模型生成数据库时,它以每表类型而不是我想要的每继承类型的形式出现。

我有:

  1. 组设置为抽象
  2. 当 type(column) = 每个表的不同 int 时,每个组类型表都会有条件地映射到 Group

谁能指出我需要做些什么才能将其更改为每个继承类型的正确方向?

编辑:通过评论请求这里是我为组设置的数据库,并且没有任何组类型的数据库集

public DbSet<Group> Groups { get; set; }

以下是生成的类:

团体:

public abstract partial class Group
{
    public Group()
    {
        this.GroupHierarchies = new HashSet<GroupHierarchy>();
        this.GroupHierarchies1 = new HashSet<GroupHierarchy>();
        this.NetworkActions = new HashSet<NetworkAction>();
        this.PermissionAssignments = new HashSet<PermissionAssignment>();
        this.UserProfiles = new HashSet<UserProfile>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Acronym { get; set; }
    public string Description { get; set; }
    public Nullable<System.DateTime> CreatedDate { get; set; }

    public virtual ICollection<GroupHierarchy> GroupHierarchies { get; set; }
    public virtual ICollection<GroupHierarchy> GroupHierarchies1 { get; set; }
    public virtual ICollection<NetworkAction> NetworkActions { get; set; }
    public virtual ICollection<PermissionAssignment> PermissionAssignments { get; set; }
    public virtual ICollection<UserProfile> UserProfiles { get; set; }
}

组类型之一:

public partial class HoaManagementCompany : Group
{
    public string Address { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
}

另一种组类型,将来会有更多,但只有这两个,直到我让它工作。

public partial class HoaAttorney : Group
{
    public string Address { get; set; }
}
4

3 回答 3

3

当我从模型生成数据库时......

您是否使用模型优先策略?不幸的是,这会使您的模型难以获得 TPH 继承(这对于 Code-First 或 Database-First 策略来说很容易)。

(Code-First 的默认继承映射是 TPH,因此您不应该遇到 Code-First 的问题。)

开箱即用的 TPH 不适用于 Model-First。Model-First 的默认继承策略是 TPT,在模型设计器中没有简单的方法可以切换到 TPH:

可以使用 Model First 映射到 TPH 继承,但您必须编写自己的数据库生成工作流程,这很复杂。然后,将此工作流分配给 EF 设计器中的数据库生成工作流属性。一个更简单的替代方法是使用 Code First。

Microsoft 提供了一个附加工具 - Entity Designer Database Generation Power Pack - 它支持 Model-First 的 TPH 数据库生成工作流。但问题是它看起来维护得不是很好(2012 年 5 月的最后一次更新)并且它不支持 Visual Studio 2012。但是如果你使用 VS 2010,你可以尝试一下。

于 2013-06-12T18:03:55.393 回答
0

You should only use your Groups DBSet for TPH. Also make sure you aren't adding Table annotations to the poco classes

于 2013-06-10T21:53:32.837 回答
0

尝试关注这个博客,它过去对我有用。

使用 EF 代码优先继承:第 1 部分 – 每个层次结构的表 (TPH)

还谈到Table per Type (TPT)Table per Concrete class (TPC)继承。

于 2013-06-12T17:14:48.170 回答