سؤال

يمكننا استخدام SQL فقط مثل هذا:

SELECT * FROM student WITH(NOLOCK);

كيف يمكنني تحقيق ذلك مع LINQ إلى SQL دون استخدام TransactionScope?

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

المحلول

لا يحتوي LinQ على SQL على أي آلية للقيام بذلك، ولكن يمكنك إنشاء معاملة مع مستوى عزل معين. إلقاء نظرة على الكود أدناه:

using (var con = new SqlConnection("constr"))
{
    con.Open();

    using (var transaction = con.BeginTransaction(
        IsolationLevel.ReadUncommitted))
    {
        using (var context = new SchoolDataContext(con))
        {
            // HACK: Setting the context.Transaction is 
            // needed in .NET 3.5 (fixed in .NET 4.0).
            context.Transaction = transaction;
            var q = from s in context.Students select c;
        }
    }
}

في بعض الأحيان استخدام هذا النوع من العزلة مفيد، أي لأسباب الأداء. ولكن يرجى التأكد من عدم القيام بأي عمليات إنشاء أو تحديث أو حذف (CUD) باستخدام هذا النوع من عزل قاعدة البيانات. يعتمد ذلك بالطبع على مواقفك، لكن بياناتك قد تحصل في حالة غير متناسقة.

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