هل هناك طريقة لإرجاع جميع السجلات بشكل عام من جدول باستخدام Entity Framework

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

سؤال

في الأساس سأتطلع إلى تنفيذ طريقة كهذه.

IQueryAble GetQuery<T>(Entities db) أو طريقة التمديد Entities.GetQuery<T>()

بهذه الطريقة يمكنك القيام بأشياء كهذه

public IQueryable<T> GetAll()
{
return yourEntityClasses.GetQuery<T>();
}

والذي من شأنه أن يُرجع تعبير استعلام SELECT * FROM ومن الواضح أنه يمكنك من هناك إنشاء طرق عامة إضافية للفرز وترقيم الصفحات، حيث ستوفر لك التعبيرات وما إلى ذلك علاوة على ذلك الاضطرار إلى تكرار التعليمات البرمجية لهذه الطرق لكل جدول.أعلم أن SubSonic3 يقوم بعمل جيد جدًا في هذا الأمر، ولكنه كان يحاول تكرار بعض الوظائف في مشروع EntityFramework الذي أعمل عليه.الشيء الوحيد الذي أراه في EF هو CreateQuery وObjectQuery ولكن كلاهما يتطلب منك تمرير سلسلة استعلام تتطلب منك معرفة اسم الجدول.

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

المحلول

حسنًا، من الممكن الحصول على السلسلة التي تحتاج إلى وضعها في طريقة CreateQuery تلقائيًا.

في الأساس هو مجرد string.Format("[{0}]",entitySetName);

كيف تحصل على اسم مجموعة الكيانات، بافتراض أنك لا تستخدم شيئًا يسمى MEST، ومعظم الأشخاص لا يستخدمونه، يمكنك استخدام بعض الوظائف التي كتبتها هذه النصيحة للحصول على EntitySet لـ T ومن ذلك الاسم.

بمجرد القيام بذلك، سيكون من السهل عليك كتابة طريقة الامتداد

أي.

public static IQueryable<T> GetAll<T>(this ObjectContext context)
{
    var wkspace = context.MetadataWorkspace;
    EntitySet set = wkspace
       .GetEntitySets(wkspace.GetCSpaceEntityType<T>())
       .Single(); 
    return context.CreateQuery<T>(string.Format("[{0}]",set.Name);
}

راجع النصيحة أعلاه للتعرف على الوظائف الأخرى المستخدمة.

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

أليكس

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