2014-08-28 2 views
0

Все,NHibernate session.Flush() - Запускает Update() без причины

При загрузке сущности и ее ассоциации путь жадностью, то вызов session.Flush(), вызывает Update() для запуска на ассоциированного объекта.

Ex:

Счет -> Проект

Загрузка одного счета и связанного с ним проекта (загрузки проекта с нетерпением), то вызов session.Flush() запускает оператор Update() в рамках проекта. НИКАКИХ ИЗМЕНЕНИЙ не было сделано между нагрузкой и Flush для любого из объектов.

IStatefulSession sess = PersistentInvoiceHeader.AcquireCurrentSession(); 
      InvoiceHeader hdr = sess.Session.CreateCriteria<InvoiceHeader>() 
        .Add(Restrictions.Eq(InvoiceHeader.PROP_ENTITYID, 25051)) 

        .SetFetchMode(InvoiceHeader.PROP_PROJECT, NHibernate.FetchMode.Eager) 
        .UniqueResult<InvoiceHeader>(); 

      sess.Session.Flush(); 

трассировки (Job_Info является объектом проекта, связанный ж/счета):

NHibernate: SELECT ... FROM InvoiceHeader this_ inner join Job_Info project2_ on this_.ProjectId=project2_.entity_id WHERE this_.entity_id = @p0;@p0 = 25051 [Type: Int32 (0)] 
NHibernate: UPDATE Job_Info SET RowVersion = @p0, Created = @p1, LastUpdated = @p2, public_surveyor = @p3, guid = @p4, updated_at = @p5, status = @p6, entry_date = @p7, file_number = @p8, client_reference = @p9, contact = @p10, order_date = @p11, instructions_1 = @p12, instructions_2 = @p13, instructions_3 = @p14, instrument = @p15, quote = @p16, quote_document = @p17, pin = @p18, project_notes = @p19, due_date = @p20, due_date_fw = @p21, lock_status = @p22, plan_attached = @p23, notes_attached = @p24, type_extra = @p25, currency_code = @p26, master_job_id = @p27, manager_id = @p28, contact_id = @p29, office_id = @p30, job_type_id = @p31, client_entity_id = @p32, country_id = @p33, region_id = @p34 WHERE entity_id = @p35 AND RowVersion = @p36; 

Я очень удивлен, что Nhibernate работает в Update() заявление на то, что ничего не изменилось! Ни одно из объектов не загрязнено, зачем было обновление?

Я использую Nhibernate 3.3, .net 4.0, это консольное приложение.

+1

Я думаю, что иногда это происходит, если данные, считанные из db, не соответствуют типам, специфицированным сущностью. – mxmissile

+0

Типы данных? Каково объяснение этого, поскольку для меня это звучит как проблема с библиотекой Nhibernate. – ActiveX

+2

Если вы нанесете нулевое целое число на свойство int, оно будет обновлено до нуля. Если вы наберете длинное значение на int, оно тоже будет обновлено. – Najera

ответ

0

Спасибо за ответы, - оказалось, что это плохое картографирование.

Смежные вопросы