我正在尝试实现组表固有的各种表。当我从模型生成数据库时,它以每个表的类型而不是像我想要的每个继承类型的形式出现。
我有:
有人能指出我正确的方向,我需要做些什么来改变这种继承类型?
编辑:根据请求通过评论这里是我为组设置的数据库,并没有任何组类型的dbset
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; }
}
答案 0 :(得分:3)
当我从模型生成数据库时......
您使用的是Model-First策略吗?遗憾的是,这会使您的模型难以获得TPH继承(这对于Code-First或Database-First策略来说很容易)。
(Code-First的默认继承映射是TPH,因此您不应该遇到Code-First问题。)
开箱即用TPH不适用于Model-First。 Model-First的默认继承策略是TPT,在模型设计器中有no easy way切换到TPH:
可以使用Model First映射到TPH继承但是你 必须编写自己的数据库生成工作流程 复杂。然后,您可以将此工作流分配给数据库 EF Designer中的生成工作流属性。更容易的选择 是使用Code First。
Microsoft还有一个额外的工具 - Entity Designer Database Generation Power Pack - 支持Model-First的TPH数据库生成工作流程。但问题是它看起来维护得不是很好(从2012年5月开始更新)并且它不支持Visual Studio 2012.但是如果你使用VS 2010,你可以试试。
答案 1 :(得分:0)
您应该只将群组DBSet用于TPH。 另外,请确保您没有将表注释添加到poco类
答案 2 :(得分:0)
尝试关注此博客,过去它对我有用。
Inheritance with EF Code First: Part 1 – Table per Hierarchy (TPH)。
还讨论Table per Type (TPT)
和Table per Concrete class (TPC)
遗传问题。