[.net] LINQ2SQL: كيفية تعديل قيم الحقول عند تحميل الكيانات المجهولة؟


Answers

Linq2Sql يولد فئات جزئية للجداول مما يجعل من السهل جدا لتمديد. ما عليك SomeTable.cs إضافة ملف SomeTable.cs إلى الحل الخاص بك (ضمن نفس مساحة الاسم التي تم إنشاؤها تلقائيا سياق دب) وتحديد خاصية إضافية مع أي سلوك تحتاجه:

public partial class SomeTable {
    public System.DateTime CustomDT {
        get { return DT.AddYears(120); }
    }
}

الآن يمكنك الاستعلام عنها مثل المعتاد:

        var e = ctx.SomeTable.Select(x => new { x.CustomDT }).First();
        Console.WriteLine(e.CustomDT);

تحديث :

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

  1. طبقة صريحة فوق L2S دال. عادة ما يكون نمط مستودع الذي يعود دتوس مشابهة جدا لتلك التي تم إنشاؤها تلقائيا من قبل L2S. في هذه الحالة يمكنك إخفاء الخاصية DT إجبار المستهلكين على استخدام CustomDT فقط.
  2. ضع المنطق في قاعدة البيانات (المشاهدات، الأعمدة المحسوبة، سبس). ولا أرى هذا النهج بالنسبة لمشروع جديد، بل قد يكون خيارا قابلا للتطبيق لبعض التطبيقات القديمة.
Question

!!! الرجاء عدم إعادة التوجيه إلى هذه المقالة ، لأنه لا يحل المشكلة الموضحة أدناه.

لنفترض أن لدينا مثل هذا الجدول في قاعدة البيانات:

SomeTable

  • إد (إنت)
  • دت (داتيتيم)

لقد قمنا بتكوين سياق بيانات Linq2Sql. وقمنا بتكوين كيان ل سوميتابل: أسلوب أونلودد بتعديل دت في مثل هذه الطريقة أن داتيتيمكيند من دت يصبح أوتك (في البداية هو غير محدد).

الآن هنا المشكلة:

إذا طلبنا البيانات باستخدام كيان كامل، يتم استدعاء الأسلوب أونلودد:

From x In ourDataContext.SomeTable Select x

ولكن إذا طلبنا فقط جزء من الجدول (وبالتالي توليد نوع مجهول)، أونلودد لا يسمى:

From x In ourDataContext.SomeTable Select x.DT

ومن الواضح أن أونلودد معرف في كيان سوميتابل، وليس في نوع مجهول.

في الوقت الحالي أعتبر إنشاء كيانات مخصصة تحل محل أنواع مجهولة المصدر. ولكن ربما شخص ما لديه حل أفضل؟




يمكنك استخدام linq-to-sql لجزء الاستعلام واستخدام linq-to-objects للاستيلاء على الخاصية DateTime تريد (أنت لا تعود في الواقع نوع مجهول).

(From x In ourDataContext.SomeTable _
 Select x).AsEnumerable() _
          .Select(Function(x) x.DT)



Related