отношения hasOne fluent-nhibernate возвращают NULL - PullRequest
0 голосов
/ 30 января 2012

У меня возникли некоторые трудности с представлением желаемого результата в беглом-гибернации. Возможно, я просто ошибочно отношусь к такой простой концепции.

Объект People заполняется из сторонней службы. Позже можно создать учетную запись (учетные данные вместе с guid, который будет использоваться в качестве ключа API). У пользователя будет только один набор учетных данных, и учетные данные являются уникальными для каждого пользователя.

В области администрирования веб-приложения желательно указать некоторые свойства объекта People вместе с их именем пользователя.

В конечном итоге, при запросе всех сущностей людей, Account всегда равен NULL.

  • Это неправильное использование HasOne?

По сути, я хочу выполнить левое внешнее объединение для учетной записи.

public class Account
{
    public virtual Guid Id { get; set; }
    public virtual string UserName { get; set; }
    public virtual string Password { get; set; }

    public virtual People People { get; set; }
}

public class People
{
    public virtual int UserID { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }

    public virtual Account Account { get; set; }
    ...
    ...
    ...
}

 public class AccountMap: ClassMap<Account>
    {
        public AccountMap()
        {
            Table("Account");
            LazyLoad();
            Id(x => x.Id).GeneratedBy.Assigned().Column("ID");
            Map(x => x.UserName).Column("UserName").Not.Nullable().Length(100);
            Map(x => x.Password).Column("Password").Not.Nullable().Length(100);
            References(x => x.People).Column("People_id");
        }
    }

public class PeopleMap : ClassMap<People>
{
    public PeopleMap()
    {
        Table("People");
        LazyLoad();
        Id(x => x.UserID).GeneratedBy.Identity().Column("People_id");
        Map(x => x.FirstName).Column("First_Name").Length(50);
        Map(x => x.LastName).Column("Last_Name").Length(50);
        HasOne(x => x.Account).PropertyRef(r => r.People).Cascade.All();
    }
}

При выполнении моих тестов PersistenceSpecification таблицы генерируются так, как я ожидал:

create table Account (
        ID UNIQUEIDENTIFIER not null,
       UserName TEXT not null,
       Password TEXT not null,
       People_id INT,
       primary key (ID),
       constraint FKBE1051AFE1BC1FAE foreign key (People_id) references People
    )

Я что-то здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 31 января 2012

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

1 голос
/ 30 января 2012

Похоже, вам нужно использовать HasOne в реализациях People и Account ClassMap.Вы в настоящее время показываете аккаунт как References Люди, но не наоборот.

...