Отображение OneToOne по коду nhibernate 3.2 - PullRequest
4 голосов
/ 30 октября 2011

Я пытаюсь обновить проект и использовать компоновщик кода для сборки.

У меня есть 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; }
}

Структура базы данных выглядит следующим образом:

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

С FluentNHibernate я мог бы отобразить это так:

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();
 }
}

Но я не могу заставить его работать со сборкой кода в 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 -> Пользователь сопоставлен со столбцом UserId, но как?.

1 Ответ

5 голосов
/ 30 октября 2011

Поскольку вы использовали References() в Fluent, вам необходимо преобразовать это в 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); });
    }
}

Две ноты:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...