نوشته شده توسط
alireza_s_84
وقتی شما از EF برای ویرایش استفاده میکنید زمانی که موجودیت واکشی شد در حافظه کش میشه و تغییر اطلاعات در پایگاه داده تاثیری روی اون نداره. برای مدیریت همزمانی در EF باید پراپرتی مربوطه در مدل رو با Attribute امضا کنید:
[Timestamp]
public byte[] RowVersion { get; set; }
اطلاعات بیشتر:
https://docs.microsoft.com/en-us/asp...vc-application
عرض سلام مجدد جناب alireza_s_84 عزیز
من تمام کارهایی که فرموده بودید رو انجام دادم و موضوع رو تست و نتیجه مثبت گرفتم. اما وقتی تصمیم گرفتم داخل پروژه اصلی پیاده سازیش کنم به یک مشکل عجیب برخوردم !
در پروژه اصلی زمانی که کاربر از دیتاگرید کالای مورد نظرش رو انتخاب می کنه، اطلاعات کالای انتخاب شده رو به کمک کد زیر برای فرم ویرایش ارسال می کنم :
البته آبجکتی که به فرم ویرایش ارسال می کنم دقیقا خوده Product (کالا) نیست بلکه آبجکت View ساخته شده از کالا (VwProduct) هست. بعد هم در فرم ویرایش زمانی که کاربر روی دکمه ثبت کلیک می کنه، مجددا یک بار دیگه اطلاعات آبجکت Product رو از دیتابیس می خونم و فیلد RowVersion اون رو با فیلد RowVersion آبجکتی که به فرم ارسال شده بود مقایسه می کنم تا متوجه تغییرات در فیلد مربوطه بشم.
اما مشکل اینجاست که حتی زمانی که هیچ ویرایشی صورت نمی گیره و فیلد RowVersion ثابته، باز هم برنامه RowVersion آبجکت ارسالی رو با RowVersion آبجکت خونده شده از دیتابیس برابر نمی دونه در صورتی که که وقتی با یک BreakPoint برنامه رو بررسی کردم متوجه شدم که مقدار RowVersion ها با هم کاملا برابره ! ولی if اون ها رو نابرابر تشخیص میده :عکس مقدار آبجکت خونده شده از دیتابیس :
مشکل از کجاست...؟
بابت طولانی شدن سوالم واقعا عذر میخوام ولی خب هدفم این بود که کاملا واضح مشکل رو بیان کنم.
ممنونتون میشم اگر راهنماییم کنید.
متشکرم