NHibernate сохранить объект в отношениях один-к-одному - PullRequest
0 голосов
/ 21 февраля 2012

Я новенький в nHibernate, помогите мне сохранить объект и его соединения в базе. У меня есть база с двумя таблицами:

  • персона (idPerson, firstName, secondName, idService
  • сервис (idService, имя)

Столовый сервиз имеет 3 позиции (золото, серебро, бриллиант)


Отображение:

 public class PersonMap:ClassMap<Person>
    {
        public PersonMap()
        {
            Id(x => x.id);
            Map(x => x.firstName);
            Map(x => x.lastName);
            Map(x => x.status);
            References(x => x.serviceType).Column("idServiceType");
            Table("Person");
        }
    }
    public class ServiceMap : ClassMap<ServiceType>
    {
        public ServiceMap()
        {
            Id(x => x.id);
            Map(x => x.serviceName);
            Table("Service");
        }
    }

Я использую следующий метод в репозитории для сохранения:

public void Saves(Person entity)
    {
        using (var session = hibernateHelp.OpenSession())
        {
            using (var transaction = session.BeginTransaction())
            {
                ServiceRepository srp = new ServiceRepository();
                NHibernateUtil.Initialize(entity.service);
                session.Save(entity);
                transaction.Commit();
            }

        }
    }

Я получаю дату (firstName = "My" lastName = "Go" status = TRUE, serviceType = "gold"), затем я создаю Person:

Person df=new Person{
           firstName="My",
           lastName="Go",
           status=true,
           serviceType=new ServiceType{serviceName="gold"}
           };

Когда я отправляю его в репозиторий методом Save (см. Выше), работает отображение, сохраняется новый объект в таблице person и создается новая заметка в табличном сервисе. Мне не нужно создавать новую заметку в табличном сервисе, поскольку она содержит одну. Как сделать метод заставки, чтобы сохранить ссылку на табличный сервер, а не создать новую ??? Я ценю любые ссылки и предложения.

1 Ответ

0 голосов
/ 22 февраля 2012
Person newPerson = new Person
{
    FirstName = "My",
    LastName = "Go",
    Status = true,
    serviceType = session.Load<ServiceType>(idOfGold)  // returns the service if loaded or a proxy representing it which is enough to save the reference
    // or
    serviceType = session.Query<ServiceType>().Where(st.name == "gold").Single()
};

session.Save(newPerson);
...