1

1対0または1つのマッピングを作成したいPersonとLoginAccountクラスがあります。つまり、1人のログインアカウントをゼロまたは1つだけ持つことができます。

私はこれを試しました..Person.hbm.xml

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

<id name="PersonID">
  <generator class="native" />
</id>


<property name="Title" />
<property name="FirstName"  />
<property name="SecondName"  />
<property name="ThirdName"  />
<property name="LegalFullName"  />
<property name="LegalFullNameLocal"  />
<property name="AliasFullName"  />
<property name="Suffix"  />
<property name="PreviousLegalName"  />
<property name="ReasonForNameChange"  />
<many-to-one class="OESPCS.Model.LoginAccount" column="LoginAccountID" name="LoginAccount"  foreign-key="fk_LoginAccountID_Person"  unique="true">

</many-to-one>

LoginAccount.hbm.xml

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

<class name ="LoginAccount">

  <id name="LoginAccountID">
    <generator class="native" />
  </id>

  <property name="LoginId" unique="true" />
  <property name="Password" />
  <property name="SaltKey" />
  <property name="PasswordChangedOnDate"/>
  <property name="IsPasswordChangeRequired" />
  <property name="IsKeepSignedIn" />
  <property name="IsMultiSessionAllowed" />


  <property name="PrivacyPolicyVersion" />
  <property name="IsLocked"  />
  <property name="LockedOnDate" />
  <property name="LockedTillDate" />
  <property name="IsDisabled" />
  <property name="DisabledOnDate"  />
  <property name="DisabledTillDate" />


  <property name="LoginFailAttempts" />

  <one-to-one class="OESPCS.Model.Person" name="person"  foreign-key="fk_LoginAccount_PersonID"/>


</class>

DBでは、このマッピングにより1対1のマッピングが得られますが、私のプロジェクトでは、個人がLoninAccountを持っていない可能性があるため、個人テーブルのLoginAccountIdはnullになる可能性がありますが、個人hbmでunique = trueと言っているため、複数回は許可されません。

だから私は1対0を行う必要がありますか、それとも1つのマッピングが可能ですか?

この問題を解決する方法は?

4

1 に答える 1

0

NHinernateを初めて使用する場合は、Fluent NHibernateやNH統合自動マッピング(3.2で導入)などのコードによるマッピングテクノロジの使用を検討する必要があります。

次のサンプルコード(Fluent NHibernate)で開始できます。

public class LoginAccount 
{
public virtual Int Id  { get; set; };
public virtual string Password { get; set; };
public virtual string Saltkey { get; set; };

public virtual Person BelongsTo{ get; set; }

  public LoginAccount()
  {
  }
}

public class LoginAccountMap: ClassMap<LoginAccount>
{
  public LoginAccountMap()
  {
    Id(x => x.Id);
    Map(x => x.Password);
    Map(x => x.Saltkey);

    References(c => c.BelongsTo).Cascade.None().Fetch.Join().NotFound.Ignore();
  }
}

public class Person
{
public virtual Int Id  { get; set; };
public virtual string FirstName  { get; set; };
public virtual string SureName  { get; set; };

public virtual LoginAccount UserAcc{ get; set; }

  public Person()
  {
  }
}

public class PersonMap: ClassMap<Person>
{
  public PersonMap()
  {
    Id(x => x.Id);
    Map(x => x.FirstName);
    Map(x => x.SureName);

    References(c => c.UserAcc).Cascade.SaveUpdate().Fetch.Join().NotFound.Ignore();
  }
}
于 2012-08-29T11:29:31.380 に答える