NHibernate Родительский Ребенок Отображение - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть родительская / дочерняя связь между таблицей ACCOUNT и таблицей USER.В настоящее время я сопоставил двунаправленные сопоставления Fluent следующим образом:

public class Account {
  public virtual IList<User> ListUsers { get; private set; }

  public virtual void AddUser(User user)
  {
    user.Account = this;
    ListUsers.Add(user);
  }
}

MAPPING: HasMany(x => x.ListUsers).Table("UserInfo").KeyColumn("Id_Account").Inverse().Cascade.All().AsList();

public class User {
  public virtual Account Account { get; set; }
  public string Username { get; set; } 
}

MAPPING: References(x => x.Account).Column("Id_Account");

На практике я не могу предвидеть, что когда-либо захочу сослаться на сущность Account из сущности User.Точно так же я не могу предвидеть, что захочу загрузить все сущности User из родительской сущности Accounts.Я довольно новичок в NHibernate и мне было интересно, является ли приведенный выше метод лучшим способом повышения производительности?Предпочтительны ли двунаправленные отношения, и стоит ли мне ссылаться только на Id?Спасибо

1 Ответ

1 голос
/ 27 сентября 2011
  1. двунаправленные ссылки - это правильный подход, на мой взгляд. Если вы используете lazy-loading для свойства Account, то в любом случае он будет загружать только идентификатор учетной записи.
  2. вы указали, что свойство ListUsers равно inverse=true, что означает, что сущность User отвечает за сохранение ссылки. Поэтому я считаю (если я правильно помню), что строка ListUsers.Add(user); не является необходимой, поскольку ассоциация будет создана сущностью User.
    Таким образом, это означает, что вам не нужно загружать всю коллекцию ListUsers из БД при добавлении пользователя.
...