0

我在 nhibernate 非常陌生。

我正在尝试创建一个与(SQL Server 2008)表相关的类,如下所示:

主表:

  • 第 1 列:ID (int) PK
  • 第 2 列:登录(nvarchar)
  • ...

并具有指示我是否存在另一个表中的任何行的属性(代理键上的左连接)。

其他表:

  • ...
  • X 列:登录(nvarchar)
  • ...

但我真的不知道如何告诉 nhibernate 让 [Main Table].Login 列与 [Other Table].Login 列匹配。

我正在使用 hbm (xml) nhibernate(不是个人选择)。
而且我还没有尝试过任何东西(除了在网上搜索如何做到这一点)。

编辑(05-27):这似乎有效。

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping namespace="xxx.xxx" assembly="xxx" xmlns="urn:nhibernate-mapping-2.2">

<class name="xxx.xxx.ADUser" table="AD_USER">
  <id name="Id" column="ID">
    <generator class="native"/>
  </id>
  <property name="Login" column="LOGIN"/>
  <property name="Hidden" column="HIDDEN"/>
  <many-to-one name="Resource" column="LOGIN" property-ref="Login" cascade="none" />
</class>

</hibernate-mapping>


[DataContract()]
public class ADUser : xxx.AbstractPersistentObject
{
    [DataMember(EmitDefaultValue = false)]
    public virtual string Login { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public virtual bool Hidden { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public virtual AbstractHumanResource Resource { get; set; }
}
4

1 回答 1

1

这是一种方法。首先,定义你的领域模型:

public class Main
{
    public virtual Other Other { get; set; }
    //Id and other properties not shown
}

public class Other
{
    public virtual string Login { get; set; }
    //Id and other properties not shown
}

“其他”类映射很简单:

<class name="Other">
  ...
  <property name="Login" unique="true" />
</class>

主类只有一个不同的位,即property-ref,它可以满足您的要求:

<class name="Main">
  ...
  <many-to-one name="Other" column="Login" property-ref="Login" />
</class>

使用此模型,您只需Other自然地分配实例。您可以Main.Other在需要时检查 null。

如果您需要处理遗留数据,其中可能存在Main非空Login但没有相关记录的记录Other,请使用not-found="ignore".

于 2013-05-24T13:27:29.637 回答