powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate SaveOrUpdate
7 сообщений из 7, страница 1 из 1
NHibernate SaveOrUpdate
    #36499109
Hug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hug
Гость
Всем привет.
Хочу заставить работать SaveOrUpdate
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Pharm.Core"
                   namespace="Pharm.Core.Domain">
  <class name="PrepBrand, Pharm.Core" table='Prep_brand'>
    <id name="Id" unsaved-value="0" type="int">
      <column name="id" not-null="true"/>
      <generator class="native"/>
    </id>
    <property name="Name">
      <column name="Name" not-null="true" />
    </property>
  </class>
</hibernate-mapping>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[Test]
public void TestRepo()
{
            var brand = new PrepBrand {Id = 41, Name = "Test"};
            var t = new List<DicDomain> {brand};
            using (var repo = new DicDomainRepository())
                repo.SaveAll(t);
}
public void SaveAll(List<DicDomain> dicDomains)
{
         using (ITransaction tx = NHibernateSession.BeginTransaction())
         {
                    foreach (DicDomain price in dicDomains)
                        NHibernateSession.SaveOrUpdate(price);
                    tx.Commit();
         }
 }
При существующем ID все происходит нормально - идет апдейт.
При несуществующем дб Инзерт, а идет опять апдейт. Все правильно - хибернейт не знает, что это новый объект. Как ему это сообщить?
http://devlicio.us/blogs/mike_nichols/archive/2008/07/29/when-flushing-goes-bad-assigned-ids-in-nhibernate.aspx
Шаманство с тегом version, который нигде толком не описан. Может кто сталкивался с версионированием?
...
Рейтинг: 0 / 0
NHibernate SaveOrUpdate
    #36499173
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как если хардкодно проставлять ID, то оно работать не будет. Нужен IDENTITY.
...
Рейтинг: 0 / 0
NHibernate SaveOrUpdate
    #36499182
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://www.hibernate.org/hib_docs/nhibernate/html/manipulatingdata.html

Код: plaintext
1.
2.
<id name="Id" type="Int64" column="uid" unsaved-value="0">
    <generator class="hilo"/>
</id>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// in the first session
Cat cat = (Cat) firstSession.Load(typeof(Cat), catID);

// in a higher tier of the application
Cat mate = new Cat();
cat.Mate = mate;

// later, in a new session
secondSession.SaveOrUpdate(cat);   // update existing state (cat has a non-null id)
secondSession.SaveOrUpdate(mate);  // save the new instance (mate has a null id)
...
Рейтинг: 0 / 0
NHibernate SaveOrUpdate
    #36499511
Hug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hug
Гость
МСУ,

он с null id инзертит все ОК)
Я же хочу, что если не найдено - то вставь, если найдено то апдейт.
upsert

и тут либо вариант:
Get()? Insert(): Update()

Либо SP :( [скока подобного написано умотаться - хочется уходить]
...
Рейтинг: 0 / 0
NHibernate SaveOrUpdate
    #36499546
Hug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hug
Гость
Жаль, что ORM так обезличивает БД
У MySQL в арсенале есть мощные:

INSERT ... ON DUPLICATE KEY UPDATE
INSERT IGNORE

Есть быстрые вставки
Isert into(f1,f2..) values(v1,v2), (v3,v4)
Load In File

От меня всю эту пакетную обработку забирают, предлагая медленные методы.
Пусть дадут мне расширение, с которым я смогу взять все от бд(отказавшись от миграций), а не только ansi sql.
...
Рейтинг: 0 / 0
NHibernate SaveOrUpdate
    #36499577
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то много слов...

HugGet()? Insert(): Update()
Так и делайте. В чём сложность-то?

P.S. А с SaveOrUpdate разберитесь и отпишитесь, тоже интересно.
...
Рейтинг: 0 / 0
NHibernate SaveOrUpdate
    #36518510
Hug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hug
Гость
Разобрался. С моим сценарием это не получится.
Надо id генерировать на клиенте и использовать версионное поле

PS МСУ, спасибо еще раз за ту тему. Увлекся Вашими постулатами. Начитался книг по DDD,TDD. Тперь мои *.Core.dll участвую во всех солюшнах, начиная от винформ, заканчивая цепочками wcf. Все везде работает, репозитории тестируются, hql пишется. Вообщем скил и культура кодинга поднялись на уровень. Перечитал классику [Гамму, Фаулера(арх), design patterns c#, нового Рихтера]. Выбил ЗП больше:D. Спасибо!!! Жду очередного архитектурного затыка, чтобы посовещаться с Вами
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate SaveOrUpdate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]