2011-10-30 12 views
3

私はプロジェクトをアップグレードし、コードマッパーでビルドを使用しようとしています。OneToOneのコードによるマッピングnhibernate 3.2

私は2つの実体があります:データベース構造はこのようなものです

public class Person { 
public virtual int Id { get; set; } 
public virtual User User { get; set; } 
} 

public class User { 
public virtual int Id { get; set; } 
public virtual User Person { get; set; } 
} 

:「を

public class UserMap : ClassMap<User> { 
public UserMap() { 
    Id(x => x.Id).GeneratedBy.Identity(); 
    HasOne(x => x.Person).PropertyRef("User").Not.LazyLoad(); 
} 
} 

public class PersonMap : ClassMap<Person> { 
public PersonMap() { 
    Id(x => x.Id).GeneratedBy.Identity(); 
    References(x => x.User).Column("UserId").Not.Nullable().Not.LazyLoad(); 
} 
} 

ことができますが、次のとおりです。FluentNHibernateで

table: users, fields: id 
table: people, fields: id, userId 

私はこのようにそれをマップすることができコードマッパーでNH 3.2ビルドで動作するようにしてください。 これは私がこれまで行ってきたことです。

OneToOne(x=>x.Person, m => { 
m.PropertyReference(typeof(Person).GetProperty("User")); 
}); 

OneToOne(x=>x.User, m => {}); 

リレーションはUser.IdとPerson.Idにマッピングされますが、personidとuseridは異なる場合があります。 ユーザーに人がいない可能性もあります。

from Users user0_ left outer join People person1_ on user0_.Id=person1_.Id 

私はPerson - > UserがUserId列にマッピングされているが、その方法を指定する必要があると思います。

答えて

4

あなたが流暢でReferences()を使用していたので、あなたはManyToOne()にそれを変換する必要があります。

public class UserMap : ClassMapping<User> 
{ 
    public UserMap() 
    { 
     Id(x => x.Id, x => x.Generator(Generators.Identity)); 
     OneToOne(x => x.Person, 
       x => x.PropertyReference(typeof(Person).GetProperty("User"))); 
    } 
} 

public class PersonMap : ClassMapping<Person> 
{ 
    public PersonMap() 
    { 
     Id(x => x.Id, x => x.Generator(Generators.Identity)); 
     ManyToOne(x => x.User, 
        x => x => { x.Column("UserId"); x.NotNullable(true); }); 
    } 
} 

2つのノート:

  • User.PersonのタイプはPersonあるべきではなく、ユーザー(それはちょうど、おそらくです
  • .Not.LazyLoad()は、ほとんど常に悪い考えです。 NHibernate is lazy, just live with it
+0

thanx!私はonetoone関係で考えていただけで、manytooneではなく、素晴らしい作品です。そして、怠惰な負荷が中程度の信頼に必要でした、私はそれをnh 3.2で使用しないようにしようと考えています(恐らくnoproxy) – Bas

関連する問題