таблица моего пользователя в базе данных становится все больше (с точки зрения столбцов, а не строк) и, как следствие, замедляет различные области моего сайта.Это потому, что он пытается захватить каждый столбец из таблицы пользователя каждый раз, когда он выполняет с ним соединение.
Я подумал, что оставлю все общие поля в таблице пользователя, а затем добавлю дополнительные поля в отдельные таблицы.Например, скажем, у меня есть следующие таблицы в моей базе данных:
Users:
- UserID (PK, Identity)
- UserName
- Password
...
UsersActivity:
- UserID (PK, FK)
- LastActivityDate
- LastLoginDate
...
UsersPreferences:
- UserID (PK, FK)
- HtmlEmail
- HideEmail
...
Со следующими объектами:
public class User {
public virtual int UserID { get; set; }
public virtual string UserName { get; set; }
public virtual string Password { get; set; }
public virtual UserActivity Activity { get; set; }
public virtual UserPreferences Preferences { get; set; }
}
public class UserActivity {
public virtual User User { get; set; }
public virtual DateTime LastActivityDate { get; set; }
public virtual DateTime LastLoginDate { get; set; }
}
public class UserPreferences {
public virtual User User { get; set; }
public virtual bool HtmlEmail { get; set; }
public virtual bool HideEmail { get; set; }
}
Мне просто интересно, как лучше всего отобразить это для оптимальногоспектакль?Я подумал, что могу сделать однозначное сопоставление свойств Activity и Performance в сущности User.Однако, насколько я понимаю, сопоставление «один к одному» не поддерживает отложенную загрузку, и этот подход в итоге оказался бы медленнее.
Я также изучил сопоставление компонентов и не был слишком уверен, смогу ли я отобразить этов отдельную таблицу (пожалуйста, исправьте меня, если было бы лучше сохранить ее в той же таблице), и поддерживали ли компоненты отложенную загрузку.
Прежде чем приступить к серьезному рефакторингу своего приложения, я подумал, что смогу узнать мнение кого-то, кто мог бы это сделать.Очень благодарен за помощь.
Спасибо
Редактировать: Я обнаружил, что вы можете лениво загружать отношения один-к-одному, пока это требуется / ограничено.Какой это мой случай.Поэтому я пошел дальше и выполнил инструкции в следующей статье:
http://brunoreis.com/tech/fluent-nhibernate-hasone-how-implement-one-to-one-relationship/
Теперь проблема в том, что я получаю ошибку:
NHibernate.Id.IdentifierGenerationException: NHibernate.Id.IdentifierGenerationException: нулевой идентификатор, созданный для: UserActivity.