استثناء عند إنشاء مخطط EDMX / DB باستخدام إطار الكيان 4 باستخدام ContextBuilder مع فئة عامة

StackOverflow https://stackoverflow.com/questions/1912333

سؤال

أنا أستخدم microsoft.data.entity.ctp. (في إطار الكيان CTP) تحت إطار .NET 4 لإنشاء بيانات تعريف EDMX من فئات C # لإنشاء مخطط قاعدة بيانات.

أقوم بإعداد نموذج بسيط على هذا النحو:

public class AModelContainer : ObjectContext
{
    public IObjectSet<RegularClass> RegularClasses { 
        get { return CreateObjectSet<RegularClass>(); }
    }
}

أتابع النمط البسيط لتحديد سيثية جديدة بناء على نموذجي.

var builder = new ContextBuilder<AModelContainer>();

using(var context = builder.Create(new SqlConnection(connString)))
{
    context.RegularClasses.AddObject(new RegularClass());

    context.SaveChanges();
}

هذا يعمل بشكل جيد. حتى أحاول أن أفعل شيئا أكثر تعقيدا قليلا ...

أقوم بتوسيع نموذجي مع فئة عامة

public class AModelContainer : ObjectContext
{
    public IObjectSet<SpecialClass<string>> SpecialClasses { 
        get { return CreateObjectSet<SpecialClass<string>>(); }
    }
}

الآن على حفظ أحصل على استثناء:

تعذر العثور على معلومات رسم الخرائط والبيانات الوصفية ل "prototype" EntityType "SpecialClass`1 [[System.String، Mscorlib، الإصدار = 4.0.0.0، الثقافة = محايد، SearchKeyToken = B77A5C561934E089]].

على هذا الخط في AmodelContainer.:

return CreateObjectSet<SpecialClass<string>>();

المنشئ الافتراضي ل "specialclass" العامة لا يفعل شيئا في الوقت الراهن، إذا كان ذلك؟

public class SpecialClass<T> 
{
    public SpecialClass()
    { }
}

أو هل هذه مشكلة مع contextbuilder. عدم معرفة ما يجب القيام به بالضبط، هل هناك طريقة لاستخدام builder.comxtype ()، أو طريقة أخرى لتوجيهها؟

أو لا يمكن التعامل مع CTP مع هذا السيناريو حتى الآن ...

الذي - التي "`1"بعد اسم الفصل الدراسي أيضا لا يجلس جيدا معي في الاستثناء ...

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

المحلول

لا يمكنك استخدام فصول عامة ككيانات مع EF (وعن رمز الامتداد فقط) اليوم.

هذا قيود على إمكانيات التعيين بين CLR والنموذج المفاهيمي.

أضف BESTA2، أضفنا القدرة على السماح بهذا النوع من الأشياء:

public class Entity<TKey>
{
   public TKey ID {get;set;}
}

public class Person: Entity<int>
{
   public string Firstname {get;set;}
   public string Surname {get;set;}
}

حيث فقط Person هو "كيان" في نموذج EF، و ID العقارات من الفصول الأساسية تظهر كممتلكات Person.

ولكن لا توجد خطط في .NET 4.0 / EF 4 لدعم رسم الخرائط فئة عامة نفسها إلى كيان في النموذج.

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

اليكيال

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