سؤال

تتطلع منظمتنا إلى توحيد إطار الكيان بمجرد خروج V4. نتيجة لذلك، أنا أبحث عن ما سيأخذه لترحيل طلبنا الذي يستخدم أحمق للاستمرار إلى EF4 باستخدام دعم Poco. في بضعة أماكن نستخدم ميراث جدول واحد (المعروف أيضا باسم الجدول لكل التسلسل الهرمي). لم أتمكن من الحصول عليها للعمل باستخدام ما يلي.

الدفع (الطبقة الأساسية [يجب أن تكون مجردة ولكن تواجه مشكلة هناك أيضا]) عيد الميلاد (تنفيذ ملموس) ACHPIYMENT (تنفيذ ملموسة) التدقيق (تنفيذ ملموسي)

الآن، أنا رسم خرائط لهم مع خصائص الفئة الأساسية فقط. كل هذه الفصول في مساحة الاسم نفسها. لديهم موظف يسمى DayStyTyPeid في قاعدة البيانات، وبالتالي فإن تعيين الدفع لديه شرط "عندما DaypayTyPeid = 0". كل من الفئات الفرعية لديها نفس الحالة ذات القيم المختلفة (أي الائتمان CardCardPayment = 1، إلخ).

عندما أحاول تحميل كل قائمة بجميع المدفوعات باستخدام DataContext.payments.tolist () (Worherits DataContext من ObjectContext) أحصل على الاستثناء التالي:

"تعذر العثور على تعيين الكائنات للنوع باستخدام الهوية" datalayer.datamodel.creditcardpayment ".

لا يمكنني معرفة ما يعنيه هذا، حيث يعيش فئة Poco CreditCardPayment في مساحة الاسم نفسها نظرا لأن فئة الدفع Poco (في الواقع في نفس الملف).

ماذا ينقصني؟

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

المحلول 2

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

لذلك، حتى يعتقد أن EF لا يمثل خريطة لأحد هذه الأنواع مباشرة، يبدو أنه يحتاج إلى معرفة عنها، لأنه يغير مؤشر نصف الفئات في الفاي السفلي وآخرون. شكرا لكم على مساعدتكم في هذا الشأن.

نصائح أخرى

هذا يشكو لا حول تعيين قاعدة البيانات، ولكن نموذج لرسم الخرائط CLR.

لا يمكن ل EF لسبب العثور على الخاص بك CreditCardPayment صف دراسي.

الآن سبب واحد ممكن هو أنك لم تقم بتحميل البيانات الوصفية لذلك حتى الآن.

على سبيل المثال إذا كان لديك هذا:

Assembly 1:
 - Payment

Assembly 2 references Assembly 1:
 - CreditCardPayment extends Payment

ثم عند الاستعلام عن EF لا يعرف المكان الذي يعيش فيه الائتمان البدنية.

الطريقة للحصول على هذا مع loadassembly IE:

using (DataContext ctx = new DataContext())
{
   ctx.MetadataWorkspace.LoadFromAssembly(typeof(CreditCardPayment).Assembly);

   // now do your query.

}

تحتاج إلى أن أقول LoadFromAssembly كل تجميع غير مرجعي مباشرة بك DataContext صف دراسي.

ملحوظة: typeof(Payment).Assembly تتم الإشارة مباشرة بسبب IQueryable<Payment> الممتلكات المدفوعات.

أتمنى أن يساعدك هذا

اليكيال

مايكروسوفت.

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