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

نام تاپیک: ثبت رکورد همزمان توسط چندین کاربر

  1. #1

    ثبت رکورد همزمان توسط چندین کاربر

    با سلام. من از EF در سایتم استفاده میکنم. در یکی از جدولها ، یک فیلد کلید دارم که نباید auto-increment باشه چون بعدا ممکنه بخوام تغییرش بدم. در نتیجه راهکار رو در این دیدم که موقع ثبت ، بالاترین مقدار این فیلد رو در جدول پیدا کنم و یک مقدار اضافه کنم و رکورد رو با اون کلید ذخیره کنم. الان مشکلی که فکر میکنم وجود داشته باشه این هست که اگه در یک لحظه دو تا کاربر همزمان بخوان ثبت کنن، اونموقع فکر میکنم مقدار Id یکسان براشون در نظر گرفته بشه. خواهشا اگر راهکاری برای این مشکل دارید لطفا مطرح بفرمایید.

  2. #2
    کاربر دائمی آواتار debugger
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    Turkey
    پست
    843

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    دوست عزیز اشتباه بزرگ شما اینه که کلید اصلی auto-increment ندارید . دیتابیس را دوباره تحلیل و انالیز کنید .

  3. #3

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    نقل قول نوشته شده توسط debugger مشاهده تاپیک
    دوست عزیز اشتباه بزرگ شما اینه که کلید اصلی auto-increment ندارید . دیتابیس را دوباره تحلیل و انالیز کنید .
    ممنون از پاسختون . ببینید مساله اینجاست که من میخوام یک فیلد یکتا داشته باشم که بعدا بتونم در صورت لزوم مقدارش رو به صورت دستی تغییر بدم. حالا اگر هم کلید اصلی هم نباشه مهم نیست و میشه یک فیلد کلید auto-increment هم براش در نظر گرفت.

  4. #4

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    دوستان آیا با transaction مشکل رو حل نمیشه؟ یعنی آیا این قابلیت رو داره که اگه چند تا کاربر همزمان درخواست ثبت دادن ، عمل ثبت رو یکی یکی انجام بده؟

  5. #5
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    از کلید ترکیبی برای کلید اصلی استفاداه کنید
    مثلا IDو کد کاربری هر دو بشن یک کلید

  6. #6

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    من متوجه شدم که راه حل مشکلم این هست که به نوعی باید جدول مورد نظرم رو قفل کنم . تا کاربرای دیگه نتونن دیگه ازش بخونن یا بنویسن. خواهشا در مورد پیاده سازی Lock جدول در ef بنده رو راهنمایی کنید. من خیلی در موردش جستجو کردم و بیشتر گیج شدم. لطفا من رو راهنمایی بفرمایید.

  7. #7
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    یک فیلد بنام Rowversion با نوع timestamp اضافه کنید به جدولتون
    دیگه کاری نیاز نیست بکنید
    حتی کد هم نمیخاد بنویسید
    Sql server بصورت اتوماتیک یک مقدار Uniq به این فیلد اضافه میکنه
    و اگر کاربری بخاد رکورد مورد نظر رو ویرایش بکنه اجازه نمیده و خطا و استثناء پرتاب میکنه

  8. #8

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    نقل قول نوشته شده توسط ali_md110 مشاهده تاپیک
    یک فیلد بنام Rowversion با نوع timestamp اضافه کنید به جدولتون
    دیگه کاری نیاز نیست بکنید
    حتی کد هم نمیخاد بنویسید
    Sql server بصورت اتوماتیک یک مقدار Uniq به این فیلد اضافه میکنه
    و اگر کاربری بخاد رکورد مورد نظر رو ویرایش بکنه اجازه نمیده و خطا و استثناء پرتاب میکنه
    خیلی ممنون از راهنماییتون. فقط یک سوالی . این روش به طور کلی جدول رو قفل میکنه؟ هم برای select هم update , insert ؟

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    اسفند 1392
    محل زندگی
    دنیایی به نام برنامه نویسی
    پست
    99

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    دوست عزیز سلام.
    شما نگرا نباشید همین روشتون رو پیش برید.
    سیستم کار sql خودش اینطوریه که تا وقتی که یک سیشن کارش به اتمام نرسیده باشه اجازه درج یا آپدیت یا سلکت به سیشن دیگه ای نمیده.
    من و شما اگر همزمان بخواهیم درج کنیم مطمئنننننننننننن باشید یکی از ما دوتا زودتر به سرور میرسیم, حتی اگر باهم هم برسیم sql یکی از مارو انتخاب میکنه. بعد خودش رو لاک میکنه تا کار یکیمون تموم که شد کار اون یکی رو شروع کنه.
    پیشنهاد میکنم بدون نگرانی کارتون رو پیش ببرید

  10. #10
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    نقل قول نوشته شده توسط aminbin مشاهده تاپیک
    خیلی ممنون از راهنماییتون. فقط یک سوالی . این روش به طور کلی جدول رو قفل میکنه؟ هم برای select هم update , insert ؟
    وقتی دو یا چند کاربر همزمان روی یک (رکورد ) ویرایش انجام میدن
    وگرنه در حالت select که تاثیری نداره

  11. #11

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    سلام
    اتفاقا من هم همین مشکل رو دارم و اگر دو تا کاربر یا بیشتر همزمان با هم مثلا روی دکمه submit کلیک کنند، به انها شماره فاکتور تکراری میده (چون میاد یکی به اخرین شماره فاکتور زیاد میکنه).
    یکی از دوستان گفت باید با async و await کار کنم ولی باز هم درست نشد

  12. #12

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    دوست عزیز برای حالت select چه راهی وجود داره؟؟

  13. #13

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    درباره ی optimistic concurrency جستجو کنید.

    یک مثال برای استفاده در Entity Framework :
    https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

  14. #14

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    ببینید من میخوام اگر دو نفر همزمان یک متد را اجرا کردند به یک روشی ابتدا به یکی از درخواست ها پاسخ بده بعد به دیگری.
    حتی در جدول مربوطه به گفته دوستمون فیلد
    timestamp اضاف کردم.ولی وقتی همزمان روی دکمه ثبت کلیک میشه باز هم شماره فاکتور یکسان میده

  15. #15
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    اگر میخاید یک کلید یکتا تولید کنید یا باید ازGUID استفاده کنید
    یا همون کلید ترکیبی که بالا اشاره کردم

  16. #16

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    من منظورم از شماره فاکتور کلید نیست بلکه یک فیلد از جدول هست که هربار با کلیک کاربر یک متد صدا زده میشه ویه اخرین مقدار موجود این فیلد در جدول یکی اضافه میکنه که اگر همزمان دو نفر کلیک کنند ، اخرین مقدار این فیلد تکراری برگردانده میشه و در نتیجه شماره فاکتور جدید هم تکراری میاد برای هر دو فاکتور

  17. #17

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    نقل قول نوشته شده توسط a.golzar66 مشاهده تاپیک
    من منظورم از شماره فاکتور کلید نیست بلکه یک فیلد از جدول هست که هربار با کلیک کاربر یک متد صدا زده میشه ویه اخرین مقدار موجود این فیلد در جدول یکی اضافه میکنه که اگر همزمان دو نفر کلیک کنند ، اخرین مقدار این فیلد تکراری برگردانده میشه و در نتیجه شماره فاکتور جدید هم تکراری میاد برای هر دو فاکتور
    دقیقا من هم شرایط برنامم همین طوریه. امکان استفاده از Guid هم ندارم. چون اون کد برام مهم هست.

  18. #18

    نقل قول: ثبت رکورد همزمان توسط چندین کاربر

    این وسط من یه چیز رو متوجه نشدم.اگر ما در یک اکشن از async و await استفاده کنیم ان موقع اگر همزمان کاربرهای دیگری هم به ان اکشن request بفرستند ،همزمان به درخواست همه انها پاسخ داده میشه و کاربری معطل نمیشه ولی اگر بدون async و به صورت عادی یک اکشن توسط چند کاربر اجرا بشه اول به درخواست یکی پاسخ داده میشه بعد که کارش تموم شد به درخواست بعدی یعنی به صورت نوبتی اجرا میشن.پس چرا من و دوستم هردو این مشکل مثلا شماره فاکتور تکراری را داریم؟مگر نه این هست که چون از async استفاده نکردیم پس اکشن هربار به یک درخواست پاسخ میدهد و نباید شماره فاکتور تکراری بدهد

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

  1. پاسخ: 2
    آخرین پست: سه شنبه 13 آبان 1393, 00:00 صبح
  2. گرفتن یک رکورد از جدول توسط یک کاربر
    نوشته شده توسط AmirAlimadadi در بخش SQL Server
    پاسخ: 7
    آخرین پست: دوشنبه 13 مهر 1388, 09:12 صبح
  3. سوال: جلوگیری از خواندن یک رکورد توسط دو کاربر به صورت همزمان
    نوشته شده توسط moferferi در بخش C#‎‎
    پاسخ: 8
    آخرین پست: چهارشنبه 24 تیر 1388, 08:14 صبح
  4. سوال: درج همزمان اطلاعات توسط 2 کاربر در یک جدول
    نوشته شده توسط C#‎_web در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: پنج شنبه 13 تیر 1387, 20:35 عصر
  5. ثبت یک مقدار توسط کاربر برای همیشه در برنامه
    نوشته شده توسط smt_414 در بخش C#‎‎
    پاسخ: 5
    آخرین پست: چهارشنبه 09 آبان 1386, 17:11 عصر

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

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