نمایش نتایج 1 تا 6 از 6

نام تاپیک: مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

  1. #1
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    Question مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

    سلام دوستان وقتتون به خیر
    سال نو رو پیشاپیش تبریک عرض می کنم خدمتتون
    دوستان من میخوام زمانی که کابر در سیستم روی دکمه ویرایش کالا کلیک می کنه، جدول مربوط به کالاها یا حداقل رکورد مربوط به کالای انتخاب شده به حالت انتظار بره و کاربرای دیگه سیستم در این فاصله زمانی که کاربر اول مشغول ویرایش اطلاعاته، تنونن اطلاعات اون رکورد رو تغییر بدن تا سیستم درست کار کنه. واسه پیاده سازی این مساله باید چی کار کنم ؟
    آیا راه حل اصولی کنترل تراکنش ها در سیستم های تحت شبکه همینه ؟
    باید از Transaction ها استفاده کنم یا راه حل دیگه ای داره ؟
    ممنون میشم اگه یه سمپل کوچیک هم قرار بدید
    متشکرم

  2. #2
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

    نقل قول نوشته شده توسط csharpcollegian مشاهده تاپیک
    سلام دوستان وقتتون به خیر
    سال نو رو پیشاپیش تبریک عرض می کنم خدمتتون
    دوستان من میخوام زمانی که کابر در سیستم روی دکمه ویرایش کالا کلیک می کنه، جدول مربوط به کالاها یا حداقل رکورد مربوط به کالای انتخاب شده به حالت انتظار بره و کاربرای دیگه سیستم در این فاصله زمانی که کاربر اول مشغول ویرایش اطلاعاته، تنونن اطلاعات اون رکورد رو تغییر بدن تا سیستم درست کار کنه. واسه پیاده سازی این مساله باید چی کار کنم ؟
    آیا راه حل اصولی کنترل تراکنش ها در سیستم های تحت شبکه همینه ؟
    باید از Transaction ها استفاده کنم یا راه حل دیگه ای داره ؟
    ممنون میشم اگه یه سمپل کوچیک هم قرار بدید
    متشکرم
    برای اینکار نیازی به مدیریت تراکنش ها ندارین بلکه باید از RowVersion برای اینکار استفاده کنید.
    https://msdn.microsoft.com/en-us/library/ms182776.aspx

  3. #3
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    Question نقل قول: مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

    نقل قول نوشته شده توسط alireza_s_84 مشاهده تاپیک
    برای اینکار نیازی به مدیریت تراکنش ها ندارین بلکه باید از RowVersion برای اینکار استفاده کنید.
    https://msdn.microsoft.com/en-us/library/ms182776.aspx

    جناب alireza_s_84 بابت پاسختون ممنونم
    در رابطه با RowVersion و کاربرد اون در کنترل تداخلات همروندی جستجو کردم و نتایج مورد نیازم رو پیدا کردم. برای تست این مساله یه پروژه ایجاد کردم و با مشکل زیر روبه رو شدم که البته ربطی به RowVersion نداره و مربوط به Entity Framework هستش که ممنون میشم اگر راهنماییم کنید.
    مطابق عکس رو به رو یه جدول ایجاد کردم و یک ستون از نوع RowVersion براش در نظر گرفتم :

    بعد به وسیله Entity Framework مدل داده ای دیتابیسم رو وارد پروژه کردم. همونطور که توو عکس زیر میبینید در دو خط متوالی اطلاعات یک رکورد خاص رو از دیتابیس خوندم، اما بینشون از یک BreakPoint استفاده کردم. به این صورت که وقتی در خط کد Person1 اطلاعات رکورد اول جدول Person خونده میشه، برنامه در خط بعدی متوقف میشه. زمانی که برنامه متوقف شده در SQL Server اون رکورد خونده شده رو آپدیت کردم تا محتویات ستون RowVersionColumn تغییر بکنه که این اتفاق هم می افته. اما وقتی توو ویژوال استودیو برنامه رو ادامه میدم باز هم همون اطلاعات قبلی خونده میشه در صورتی که باید در خط کد Person2 اطلاعات جدیدی که در رکورد بروز شدن خونده بشه !
    مشکل از کجاست ؟ چرا در خط کد Person2 محتویات جدید رکورد خونده نمیشه و همون اطلاعات قبلی از دیتابیس برگردونده میشه ؟
    البته زمانی که خط کد Person2 رو در یک using جداگانه از TestDBEntities نوشتم مشکل برطرف شد، اما خب سوالم اینجاست که به هر دلیلی اگر قرار نیست در خط کد Person2 اطلاعات جدید برگردونده بشه پس باید در شرایط عکس زیر هم خط کد Person2 مقدار رکورد رو به خودش بگیره، اما null میشه ! انگار توو این حالت خط کد Person2 متوجه تغییر RowVersionColumn میشه !!!



    ببخشید که سوالم خیلی طولانی شد
    لطف می کنید اگر مجددا راهنماییم کنید

  4. #4
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

    وقتی شما از EF برای ویرایش استفاده میکنید زمانی که موجودیت واکشی شد در حافظه کش میشه و تغییر اطلاعات در پایگاه داده تاثیری روی اون نداره. برای مدیریت همزمانی در EF باید پراپرتی مربوطه در مدل رو با Attribute امضا کنید:
    [Timestamp]
    public byte[] RowVersion { get; set; }

    اطلاعات بیشتر:
    https://docs.microsoft.com/en-us/asp...vc-application

  5. #5
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    نقل قول: مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

    نقل قول نوشته شده توسط 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 اون ها رو نابرابر تشخیص میده :
    عکس مقدار آبجکت خونده شده از دیتابیس :

    1.png

    عکس مقدار آبجکت ارسال شده به فرم :

    2.png


    مشکل از کجاست...؟
    بابت طولانی شدن سوالم واقعا عذر میخوام ولی خب هدفم این بود که کاملا واضح مشکل رو بیان کنم.
    ممنونتون میشم اگر راهنماییم کنید.
    متشکرم
    آخرین ویرایش به وسیله csharpcollegian : پنج شنبه 03 فروردین 1396 در 20:04 عصر

  6. #6
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    نقل قول: مدیریت صحیح تراکنش ها در سیستم های تحت شبکه

    مشکل از اینجا بود که باید پراپرتی RowVersion رو قبل از مقایسه Convert می کردم تا if درست عمل کنه.
    با تشکر از جناب alireza_s_84

تاپیک های مشابه

  1. سوال: اتصال برنامه تحت VB6 به دیتابس MySQL در سیستم های تحت شبکه
    نوشته شده توسط Irandoost در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 0
    آخرین پست: سه شنبه 13 اسفند 1392, 11:33 صبح
  2. مقاله: ویرایش رجیستری در سیستم های تحت شبکه
    نوشته شده توسط new_sra در بخش شبکه و Networking‌
    پاسخ: 0
    آخرین پست: سه شنبه 22 اردیبهشت 1388, 11:09 صبح
  3. چگونگی مدیریت فایل در برنامه های تحت شبکه
    نوشته شده توسط godfather4ir در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: چهارشنبه 14 تیر 1385, 08:56 صبح
  4. پاسخ: 0
    آخرین پست: پنج شنبه 06 آذر 1382, 00:32 صبح
  5. پاسخ: 0
    آخرین پست: پنج شنبه 06 آذر 1382, 00:31 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •