التعامل مع التزامن EF مع سمة الطابع الزمني في نهج النموذج الأول

StackOverflow https://stackoverflow.com//questions/10682591

سؤال

أحاول تنفيذ الحل الوارد في التعامل مع التزامن مع Entity Framework في تطبيق ASP.NET MVC .

المقال يقول:

إضافة خاصية تتبع إلى جهة الدائرة

في Models\Department.cs، أضف خاصية التتبع:

[Timestamp] 
public Byte[] Timestamp { get; set; }

تحدد سمة الطابع الزمني أنه سيتم تضمين هذا العمود في عبارة Where الخاصة بأوامر التحديث والحذف المرسلة إلى قاعدة البيانات.

منذ أن أستخدم أ النموذج أولا النهج، اتبعت الخطوات من 1 إلى 5 الموضحة في إنشاء عمود الطابع الزمني باستخدام Entity Framework

  1. أضف خاصية تسمى "الطابع الزمني" إلى الكيان في نموذج EF
  2. اضبط النوع على ثنائي
  3. تعيين لاغية إلى خطأ
  4. قم بتعيين StoreGeneratedPattern على "محسوب".
  5. اضبط وضع التزامن على ثابت

عندما أقوم بتحديث الكود الخاص بي من نموذج قاعدة البيانات، يحتوي الملف Models\Department.cs الآن على

    public virtual byte[] Timestamp
    {
        get;
        set;
    }

ثم استخدمت فئة البيانات التعريفية لتحديد سمة الطابع الزمني:

// Metadata for Department entity
public class DepartmentMetadata
{
    [Timestamp]
    public byte Timestamp { get; set; }
}

س1. لقد اختبرت ما إذا كانت قيمة Timestamp يتغير العمود في حالة تعديلات الصف.إنه ليس كذلك.

تحرير 1 سبب المشكلة هو أن نوع عمود SQL Server كان binary, ، حيث كان ينبغي أن يكون من النوع timestamp.أدى تغيير نوع البيانات إلى إصلاح مشكلة عدم تحديث عمود الطابع الزمني.

س2. كنت أحاول تعديل نفس الكيان (باستخدام "فتح في علامة تبويب جديدة") لمعرفة ما إذا كان OptimisticConcurrencyException هذا خطئ.إنه ليس كذلك.ما الخطأ الذي افعله؟الرجاء مساعدتي على فهم، وذلك بفضل.

Screenshot of my <code>Timestamp</code> property

هل كانت مفيدة؟

المحلول

حدثت المشكلة لأنه كان لدي ObjectContext واحد لكل جلسة HTTP، وبالتالي فإن فتح علامة تبويب جديدة واختبارها سيؤدي إلى ذلك لا يسبب استثناء التزامن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top