Что я могу ожидать от Fluent NHibernate? - PullRequest
0 голосов
/ 30 августа 2011

Я новичок в Fluent NHibernate и ORM в целом.Я не совсем уверен, что я должен ожидать от инструмента в этой ситуации.У меня есть таблицы Fund, Holding и Asset с соответствующими объектами.У объекта Фонда есть коллекция Холдингов, и у каждого холдинга есть Актив.Когда я сохраняю фонд, я бы хотел, чтобы последующие активы и активы также были сохранены.

Мне кажется, что это происходит, однако я, кажется, пытаюсь вставить новую запись в каждую таблицу, а не обновлять существующие.У меня есть уникальные ограничения в БД, поэтому сохранение не выполняется.Нужно ли запрашивать существующие авуары и активы для их обновления?

Я уверен, что на этот вопрос уже был ответ, но я не мог понять, как искать, чтобы найти его,

Заранее спасибо.Соответствующие отображения ниже

public FundMap() 
{
...
HasMany(x => x._holdings)
    .Cascade.All();
}

public HoldingMap()
{
...
References(x => x._fund);
References(x => x._asset).Cascade.SaveUpdate();
...
}

1 Ответ

1 голос
/ 30 августа 2011

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

Причина, по которой вы обычно запрашиваете базу данных, заключается в том, что вы выполняете поиск по другим критериям, кроме ключа. Это также захватывает реляционные объекты, связанные с этой сущностью. В вашем случае это «Фонд», в котором есть много «Холдингов».

Например, если у вас в базе данных есть существующий фонд с ключом 1 и связанный с фондом холдинг, а у этого конкретного холдинга есть ключ 1, вы можете сделать следующее

var fund = new Fund{
   ID = 1,
   Name = "YourNewName",
   Holdings = new List<Holding>{
     new Holding{
       ID = 1
       Description = "NewHoldingDescription"
     }
   }
}

//and then perform a SaveOrUpdate() on the fund, it should update the entries in the database
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...