كيف يحدد nhibernate ما إذا كان سيتم إدراج أو تحديث سجل؟
-
01-10-2019 - |
سؤال
عند استخدام Session.SaveOrUpdate(myEntity);
كيف يقرر Nhibernate كيف يمكن إدراج سجل جديد أو تحديث سجل موجود؟
أواجه مشكلة أثناء حفظ كائن واحد في مشروع S#ARP. يتم استرداده من التخزين ، ثم تخزينه في حالة الجلسة لبضع طلبات الويب ، ثم يتم حفظها مرة أخرى إلى قاعدة البيانات مع تغيير خاصية واحدة (وليس S#arp [DomainSignature]
).
لدي ، في وقت التشغيل ، قارنت الكائن الذي على وشك أن يتم استمراره بإصدار تم استرداده حديثًا مباشرة من قاعدة البيانات باستخدام Equals()
الطريقة وهذا يعود صحيح. ومع ذلك ، لا يزال الكائن ينتهي إنشاء صف جديد في قاعدة البيانات.
في مكان آخر من التطبيق ، يعمل هذا بشكل جيد ولكني آمل أن يكون مؤشرًا على كيفية عمل NHIB لهذا.
المحلول
أساسًا SaveOrUpdate()
يبحث عن معرف. إذا كان المعرف موجودًا ، فسيقوم بتحديث السجل في قاعدة البيانات. إذا لم يكن المعرف موجودًا ، فسيقوم بإنشاء سجل جديد.
ومع ذلك ، يبدو أنك قد يكون لديك شيء غير تقليدي يحدث في جلستك. قد ترغب في المحاولة SaveOrUpdateCopy()
لمعرفة ما إذا كان هذا يحل مشكلتك.