سؤال

لقد واجهت استثناء عندما أستخدم Entity Framework 4.0 RC. يتم تغليف نموذج إطار العمل الخاص بي في مجموعة خاصة تحمل اسمًا.

لذلك عندما أحاول إنشاء مجموعة كائن

objectSet = ObjectContext.CreateObjectSet<TEntity>();

أحصل على خطأ:

لا يمكن العثور على معلومات التعيين والبيانات الوصفية لـ EntityType 'Procurement.core.entities.organizationChart'.

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

المحلول

لأي شخص آخر يتعامل مع الخطأ ، أعتقد أنه من الجدير بالذكر بعض السيناريوهات التي وجدت أنها تسبب هذا الخطأ (غير مفيد للغاية):

  • خصائص إملائية (حساسة للحالة!)
  • الخصائص المفقودة في فئة POCO
  • اكتب عدم تطابق بين POCO ونوع الكيان (على سبيل المثال ، int بدلاً من فترة طويلة)
  • التعدادات في POCO (EF لا تدعم التعدادات في الوقت الحالي كما أفهم)

قد يكون هناك أسباب أخرى كذلك.

HTH

نصائح أخرى

هذا ربما لأن EF لا يمكن العثور على معلومات التعيين المدمجة. داخل سلسلة الاتصال الخاصة بك ، من المحتمل أن يكون لديك شيء مثل:

metadata=res://*/Models.MyModels.csdl|...etc

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

ما عليك القيام به هو تزويد سلسلة الاتصال بمزيد من المعلومات حول مكان تضمين معلومات التعيين الخاصة بك. قم بتغيير * إلى اسم التجميع المحدد لرمز التعيين الخاص بك:

metadata=res://Procurement.EFDataProvider/Models.MyModels.csdl

إذا فشل ذلك ، فابحث عن التجميع وقم بتحميله مباشرةً في ObjectContext باستخدام:

ObjectContext.Metadataworkspace.LoadFromAssembly();

لا ترتبط بشكل مباشر بما سبق ، ولكن إذا تلقيت رسالة الخطأ هذه وكنت قد قمت بخلط POCO ونموذج عادي: فكرة سيئة!

انظر أيضًا التعليق من Jroppert في EF4 POCO (لا تستخدم T4): لا يمكن العثور على معلومات التعيين والبيانات الوصفية لـ ENTITYTYPE (شكرا Jroppert!)

كنت أحصل على هذا الخطأ لأنني حصلت على أكثر من ملف EDMX في نفس التجميع دون الاستخدام السليم لمساحات الأسماء المخصصة.

إليكم ما يقال عن الاستثناء في system.data.objects.objectContext

// الاستثناءات:

    //   System.InvalidOperationException:
    //     When the System.Data.Metadata.Edm.EntitySet from entitySetName
    //     does not match the System.Data.Metadata.Edm.EntitySet of the object’s
    //     System.Data.EntityKey.
    // -or-
    //     When the System.Data.Objects.ObjectContext.DefaultContainerName
    //     property is not set on the System.Data.Objects.ObjectContext and 
    //     the name is not qualified as part of the entitySetName parameter.
    // -or-
    //     When the specified type belongs to more than one entity set.

لقد رأيت ذلك أيضًا عندما لا يتم تحديد سلسلة الاتصال في ملف التكوين.

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

المحلول:

يضيف modelBuilder.Entity<YourEntityType>(); إلى OnModelCreating(DbModelBuild modelBuilder) طريقة.

منشور له صلة.

ما عليك سوى التحقق من الإملاء مع النموذج

قد يكون هناك سبب آخر. كما سحبت شعري لليلة.

اتضح أن هناك بعض الاضطرابات في المراجع في الحل. في مشروعي ، edmx ينتمي إلى مشروع يسمى DataAccess.Dll. لكن ليس لدي أي إشارة إليها من exe. من exe الخاص بي ، لدي إشارة إلى مشروع آخر يسمى Business.Dll, ، وهذا المشروع لديه إشارة إلى الموقع القديم ل DataAccess.DLL.

قم بإجراء الاختبار التالي لمعرفة ما إذا كان لديك مثل هذه المشكلة:

  1. افتح مدير BIN لمشروع EXE الخاص بك وابقيه مرئيًا.
  2. بناء الحل.
  3. المشروع الأول الذي سيتم بناؤه هو مشروع الوصول إلى البيانات ، ويمكنك أن ترى في مجلد BIN الوقت الحالي باعتباره تاريخه المعدل.
  4. بينما تم بناء مشاريع أخرى ، سترى أن التاريخ المعدل لمشروع DataAccess قد تم تغييره إلى مشروع قديم.

تحتاج إلى التحقق من المراجع الخاصة بك والتأكد من أنها تشير إلى مواقع التحديث الخاصة بـ DLLs.

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

لديّ POCO مخصص ومن خلال نسخ ملف EDMX إلى مشروع جديد فارغ والسماح له بتدوين الكيانات ، ثم قارنها بما ساعدني في العثور على الفرق.

خطأ في NOOB ، لكن كان لدي خطأ عندما كان وصولي إلى DB مع اسم مستخدم فقط قراءة وكلمة مرور. آمل أن تساعد أخطائي الآخرين.

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

واجهت مشكلة حيث أضفت بعض الأعمدة إلى جدول.

في تعيينات الجدول ، كنت قد أعادت تسمية أسماء الأعمدة.

على الرغم من أنني قمت بتشغيل "تحويل جميع القوالب" وأعيد بناء التطبيق ، إلا أنني لا يزال لدي "نوع البيانات الوصفية المرتبطة بالنوع <> يحتوي على الخطأ أو الحقول غير المعروفة التالية <>".

كانت الفئة لهذا الجدول في domain.poco.tt صحيحة ، لكنني وجدت ملف class.metadata.cs المقابل في domain.poco.metadata.tt لم يتم تحديثه ، وكان لديه الأعمدة الجديدة مع الأسماء الأصلية - وليس الجديد تلك التي حددتها في تعيين الجدول.

المحلول؟ لقد قمت بحذف فئة البيانات الوصفية المخالفة ، وأعدت "تحويل جميع القوالب" وتم إعادة إنشاؤه بشكل صحيح ، مع أسماء العمود/الوظائف الصحيحة.

كانت مشكلتي هي أنني قمت بتحرير قالب T4 لاستبعاد حقل النسخ المتماثل المسمى "MSREPL_TRAN_VERVENT". تسبب هذا في عدم تطابق قاعدة البيانات مع الفئات التي تم إنشاؤها والتي يمكن أن تسبب رسالة الخطأ هذه. فقط تأكد من تطابق قاعدة البيانات والفئات الخاصة بك.

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