ADO.NET الكيانات الإطار نصائح الأداء يجب على كل مطور معرفة


Answers

شيء تعلمت للتو عندما التنميط سكلس التي تم إنشاؤها بواسطة رمز إف المستخدمة في طلبي: هناك فرق بين:

IEnumerable<User> users = DB.User.Where(...);
int count = users.Count();

و

IQueryable<User> users = DB.User.Where(...);
int count = users.Count();

يقوم الأول بإنشاء استعلام كامل لاسترداد الصفوف المتطابقة من جدول User ويتم العد بعد نقل البيانات مرة أخرى إلى إف. هذا الأخير يفعل ما هو متوقع عموما: توليد SELECT COUNT ... سكل، الذي هو أكثر كفاءة بكثير.

هذا هو دقيق جدا ولكن ليس من الصعب معرفة لماذا بعد يلاحظ حول هذا الموضوع: ويرجع ذلك إلى طبيعة ملزمة من الناحية C # طريقة التمديد ثابت.

وهناك أسلوب صغير للتغلب على هذا هو استخدام الكلمة الرئيسية "فار" لإعلان المتغير:

var users = DB.users.Where(...);
int count = users.Count();

سيؤدي هذا إلى أن يتم الإعلان عن "المستخدمين" على أنه النوع نفسه الذي ". أين" وهو أكيريابل <>.

Question

ما هي نصائح الأداء التي يجب أن يعرفها كل مطور ADO.NET إف؟

يرجى وضع كل تلميح لكل إجابة وشرح لماذا طرف جيد (على سبيل المثال عن طريق تقليل روندتريبس دب).




وهناك طريقة سريعة وسهلة لتحديث كائنات الكيان منفصلة. انها طريقة التمديد.

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
    if (objectDetached.EntityState == EntityState.Detached)
    {
        object original;
        if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
            obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
        else
            throw new ObjectNotFoundException();
    }
}