سؤال

متابعة من لذلك dicsussion هنا, ، لقد قمت بتطبيق فئات جزئية لإنشاء قيم بيانات DateTime الافتراضية لحقول قاعدة البيانات التي تم إنشاؤها ومعدلة في مُنشئ.

الآن المشكلة هي أن قاعدة البيانات الخاصة بي تحتوي على أكثر من 100 جدول ، و 75+ منها لها نفس الهيكل الأساسي الذي يتضمن تعريفًا تم إنشاؤه وتعديل العمود.

لذلك .. بدلاً من إنشاء 75+ فئة جزئية أحتاج إلى الحفاظ عليها ، هل هناك أي طريقة يمكنني إنشاء فئة أساسية ترثها كل نوع EF ، والتي ترث المُنشئ الافتراضي لملء قيم DateTime للإنشاء وتعديلها؟

تحرير: جدير بالملاحظة هو أنني أستخدم EF 4.0

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

المحلول

يمكنك بالتأكيد تحديد فئة القاعدة الخاصة بك مع كل من EF4 و EF1 ، على الرغم من أنه أسهل بكثير مع EF4. انقر بزر الماوس الأيمن على سطح التصميم ويجب أن ترى خيارًا لإضافة عنصر توليد رمز. حدد مولد كائن كيان ado.net. سيؤدي هذا ملف T4 إلى مشروعك (.TT Extension) الذي يحدد القالب الذي يجب استخدامه لإنشاء فئات الكيان الخاصة بك من النموذج. لتحديد فئة قاعدة مختلفة ، انظر بداخلها لخط مثل

Private Function BaseTypeName(ByVal entity As EntityType, ByVal code As CodeGenerationTools) As String
    Return If(entity.BaseType Is Nothing, "EntityObject", MultiSchemaEscape(DirectCast(entity.BaseType, StructuralType), code))
End Function

استبدل entityObject مع فئة القاعدة الخاصة بك. لاحظ أنه إذا كنت تستخدم هذا القالب ، فيجب أن ترث فئة الأساس الخاصة بك من system.data.objects.dataclasses.entityObject - يمكنك استخدام قالب poco بدلاً من ذلك ، ولكن ربما يكون هذا كافيًا لك.

نصائح أخرى

يمكنك بالتأكيد إخبار EF باستخدام فئة أساسية لكياناتك (إنه صحيح في المصمم كخاصية للكيان) ... ولكن إذا كنت تريد التأكد من القيمة الافتراضية لهذا الحقل ، فربما يمكنك ربطها في حدثان على ObjectContext SavingChanges و ObjectMaterialized.

http://msdn.microsoft.com/en-us/library/system.data.objects.objectContext.SavingChanges.aspx

http://msdn.microsoft.com/en-us/library/system.data.objects.objectContext.ObjectMaterialized.aspx

يمكنك استخدام هذه الفرص لحقن القيمة الافتراضية التي تريد استخدامها. لذلك في معالج SavingChanges الخاص بك ، على سبيل المثال ، يمكنك التحقق من ObjectStateManager على السياق لمعرفة ما إذا كانت حالة الكيان ذات الصلة هي entitystate.alded ، ثم قم بتعيين التواريخ التي تم إنشاؤها وتعديلها على النحو المطلوب.

بدلاً من ذلك ، كما هو مقترح ، هل هناك سبب للقيمة الافتراضية للعمود في SQL Server لا يمكن أن يكون فقط getDate ()؟ (على افتراض أنك تستخدم SQL Server) ....

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