NHibernate: Добавить объект в коллекцию многие-ко-многим только по идентификатору - PullRequest
4 голосов
/ 09 октября 2011

Я ищу ярлык.У меня есть некоторые сущности NH с отношениями многих ко многим.Примерно так:

public class Customer : EntityBase<Customer>
{
    public virtual IList<Category> Categories { get; set; }
}

public class Category : EntityBase<Category>
{
    public virtual IList<Customer> Customers { get; set; }
}

Имейте в виду, что это очень простое описание, поэтому не поддавайтесь искушению предположить, что я не использую расположение «многие ко многим» или что мне следует использовать тип значения или что-то подобноечто.

На стороне БД это отношение осуществляется через отдельную таблицу с двумя столбцами - Customer_Id и Category_Id.

Я бы очень хотел иметь возможность добавитьот Category до Customer без необходимости извлечения полной сущности из базы данных.Может быть, что-то вроде этого:

customerEntity.Categories.Add(new Category { Id = 2 });

Причина этого в том, что приложение является приложением ASP.NET MVC, и я использую ViewModels для своих представлений.Эти Customer ViewModel заканчиваются List<int> для выбора категории, и когда я иду сопоставить эту ViewModel с соответствующей Customer сущностью, я хотел бы просто иметь возможность высосать эти идентификаторы категории в Categories список без необходимости обращаться к базе данных, чтобы сначала получить их.

Одна из причин, по которой я хочу это сделать, заключается в том, что я хотел бы свести к минимуму вызовы базы данных, но я также хотел бы, чтобы моикласс mapper сможет создавать сущность Customer без необходимости вызывать мой уровень обслуживания, чтобы запрашивать другие объекты ... это выглядит как плохой дизайн.Я также хотел бы избежать добавления еще одного слоя для вызова средства сопоставления, а затем выполнять другие операции сопоставления, которые извлекают сущности из хранилища (к которому сам доступ осуществляется через слой службы домена).

Я извлек idbag, но для одного я использую Fluent NHibernate, и он не поддерживает эту конструкцию, и для двух из того, что я могу почерпнуть из документов, которые дадут мне List<int> для сущности, и я все еще хотел бычтобы иметь доступ к полному объекту в этих коллекциях.

Я слишком много спрашиваю из NHibernate?

1 Ответ

3 голосов
/ 09 октября 2011

Использование ISession.Load :

customerEntity.Categories.Add(session.Load<Category>(2));

Load вернет прокси и не попадет в базу данных. Вы можете получить доступ к свойству ID прокси, не обращаясь к базе данных, но NHibernate загрузит прокси, если вы получите доступ к любым другим свойствам.

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