Используя Облегченную Версию Объекта в nHibernate Отношениях?

Действительно ли это - хорошая идея создать более легкую версию Объекта в некоторых случаях только по причине производительности, указывающей на ту же таблицу, но с меньшим количеством отображенных столбцов. Например, Если у меня есть Таблица Контакта, которая имеет 50 столбцов, и в немногих связанных объектах я мог бы интересоваться свойством FirstName и LastName, это хорошая идея создать легкую версию таблицы Contact. Например.

public class ContactLite
{
   public int Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}

}

Также действительно ли возможно отобразить несколько классов на ту же таблицу?

5
задан Amitabh 18 March 2010 в 00:05
поделиться

3 ответа

Это не очень хорошая идея. Вместо этого всегда создавайте карту полного класса и создавайте меньшие классы, на которые вы можете проектировать с помощью Transformers.AliasToBean или LINQ.

Пример последнего:

var lightContacts = (from contact in session.Linq<Contact>()
                     where contact.Country = "Argentina"
                     select new LightContact
                            {
                                Id = contact.Id
                                FirstName = contact.FirstName,
                                LastName = contact.LastName
                            })
                    .ToList();

Это позволит выбрать из БД только эти три поля, даже при фильтрации по другому полю.

Стоит отметить, что с помощью LINQ вы также можете использовать анонимный тип для выбора любой проекции без создания дополнительных типов или связок.

4
ответ дан 13 December 2019 в 22:06
поделиться

Я использовал этот подход для обработки сущности без BLOB-поля (только для обработки отношений и т. Д.).

У меня были некоторые проблемы с неявным полиморфизмом, то есть у меня была такая настройка:

открытый класс ImageWithData: Image

Наследование заставляло NHibernate загружать ImageWithData во втором цикле каждый раз, когда я разрешал изображение напрямую (не когда это было связано с помощью BelongsTo или HasMany).

В NHibernate есть опция для отключения этого поведения, называемая polymorphism = "explicit", которую вы указываете в своем базовом классе (в моем случае, Image).

Если это будет плохой дизайн в вашем случае, я не знаю, все зависит от того, зачем вам нужно осветлять свои сущности.

1
ответ дан 13 December 2019 в 22:06
поделиться

Не сопоставляйте несколько классов в одной таблице. Я попробовал это однажды, и хотя это сработало для того, что я делал, я уверен, что потом это бы меня подкосило. Лучше использовать проекции для заполнения "легких" классов.

5
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: