使用 2 种策略通过 Fluent nhibernate 映射类层次结构
我想使用流畅的 nhibernate 或 nhibernate 本身(我的意思是 hbm 文件)来组合每类表和每层次结构表策略,但我不知道如何操作。与 hbm 相比,我更喜欢 Fluent,但如果不可能,那么 hbm 也可以。我通过在 Fluent 中引入 Entity 作为 ClassMap 和所有其他作为 SubClassMap 来测试这一点,但随后在 Fluent 生成的 hbm 文件中,Entity 是一个类,所有其他都是连接类,这不是我想要的。我将在下面更详细地描述该问题。
类层次结构:
public class Entity
{
public int ID { get; set; }
public string Name { get; set; }
}
public abstract class Person : Entity
{
public string Phone { get; set; }
}
public class SystemUser : Person
{
public string Password { get; set; }
}
我想要一张表用于实体,一张表用于个人及其所有类型(其所有子类)。我的意思是我想对实体使用每类表策略,对个人和个人使用每层次表策略系统用户类。数据库结构是这样的:
EntityTable(ID(PK),Name)
PersonTable(EntityID(PK,FK),Phone,Password)
任何帮助表示赞赏。
I want to combine table-per-class and table-per-hierarchy strategies using fluent nhibernate or nhibernate itself(I mean hbm files), but I don't know how. I prefer fluent over hbm but if it's impossible, then hbm is also fine. I tested this by introducing Entity as ClassMap and all other as SubClassMap in fluent but then in hbm files generated by fluent, Entity was a class and all other were joined-classes which is not what I want. I will describe the problem in more detail below.
Class hierarchy:
public class Entity
{
public int ID { get; set; }
public string Name { get; set; }
}
public abstract class Person : Entity
{
public string Phone { get; set; }
}
public class SystemUser : Person
{
public string Password { get; set; }
}
I want to have one table for entity and one for person and all kinds of it(all its subclasses).I mean I want to use table-per-class strategy for Entity and table-per-hierarchy strategy for Person and SystemUser classes. Database structure is something like this:
EntityTable(ID(PK),Name)
PersonTable(EntityID(PK,FK),Phone,Password)
any help appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果 EntityTable Id 不是数据库生成的(NH 无论如何都不鼓励这样做),你可以使用这个技巧
if EntityTable Id is not database generated (which is discouraged by NH anyways) you can use the trick