代码之家  ›  专栏  ›  技术社区  ›  trendl

NHiberonate连接亚类

  •  3
  • trendl  · 技术社区  · 16 年前

    我正在尝试使用nhibernate和SQL Server实现类继承层次结构。我使它可以很好地与每个层次结构的表策略(映射文件中的一个表和几个子类元素)配合使用。

    但是,每个子类策略的表(一个映射文件中的n+1个表和n个联接的子类元素)在我的情况下更为合理,因为我想对子类表施加一些约束。我正在努力处理我应该在masterclass表(persons)和subclass表(contactpersons)中加入什么类型的pk/fk关联。根据NHibernate文档,表之间应该有一个主键关联。我试图将fk约束从子类pk放到主类pk,但它仍然不起作用。我得到以下例外:

    nhibernate.exceptions.genericadoexception:无法插入:[jobFlow.models.entities.contactPerson][sql:插入contactPerson(email、company、personid)值(???)]--->system.data.sqlclient.sqlException:当identity_insert设置为off时,无法为表“contactPersons”中的标识列插入显式值。

    我确实试图将“插入”设置为“打开”,但这似乎没有帮助…

    2 回复  |  直到 15 年前
        1
  •  4
  •   David M    16 年前

    您需要将persons中的列声明为int identity,但在contactpersons中声明为int—只有一个表需要跟踪标识值。您的外键/主键很好,这是您需要解决的唯一问题。

    nHibernate将插入到人员中,使用scope_identity()获取新的标识值,然后显式使用该值插入到联系人中。

        2
  •  0
  •   Stefan Steinegger    16 年前

    我正在用NH的SchemaExport创建模式。它在子类主键上创建一个外键:

    alter table ContactPersons 
    add constraint FK81E543E94B3FF9C3 
    foreign key (Persons_FK) 
    references Persons
    

    人员在映射文件中声明

    <joined-subclass name="ContactPersons">
      <key column="Persons_FK"/>
      ...