Как сохранить сущность в NHibernate, которая состоит из других сложных типов, но у меня есть только идентификатор других сложных типов - PullRequest
3 голосов
/ 29 июля 2009

Я работаю над своим первым проектом NHibernate, так что это может показаться простым вопросом.

Ниже приведен упрощенный вариант из моего реального сценария для передачи конкретного вопроса.

Допустим, у меня есть объект Customer

public class Customer
{
    prop virtual int ID { get; set; }
    prop virtual string Name { get; set; }
    prop virtual Region Region { get; set; }
}

и мой Region Entity (регионы, такие как, NorthWest, MidWest и т. Д. - довольно определенный список, который будет в каком-то раскрывающемся списке)

public class Region
{
    prop virtual int ID { get; set; }
    prop virtual string Name { get; set; }
    private readonly IList<Customer> _customers = new List<Customer>();

    public virtual void Add(Customer customer)
    {
        _customers.Add(customer);
    }

    public virtual void Remove(Customer customer)
    {
        _customers.Remove(customer);
    }

    public virtual Customer[] GetCustomers()
    {
        return _customers.ToArray();
    }
}

Когда я обращаюсь к персистентному юридическому лицу, я действительно хочу иметь только 3 части информации (Customer.ID, Customer.Name и Customer.Region.ID), как мне это сделать, потому что NHibernate ожидает клиента объект, который включает в себя полный объект Region (не только идентификатор) ...

Ответы [ 2 ]

6 голосов
/ 29 июля 2009

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

Ссылка

0 голосов
/ 29 июля 2009

Я думаю, что если у вас уже есть идентификатор региона, вам просто нужно присвоить этот идентификатор новому объекту региона и прикрепить его к вашему новому клиенту. До тех пор, пока у вас нет атрибута каскада для этой ассоциации в отображении Customer, установленном на «all» или «update» (который фактически обновит данные существующего региона в БД), он будет присоединять данный регион новому клиенту.

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