entity-framework - شرح - insert update delete in mvc 4 using entity framework



السخرية أو التزوير DbEntityEntry أو إنشاء DbEntityEntry جديد (1)

بعد في أعقاب سؤالي الآخر عن سخرية DbContext.Set لقد حصلت على سؤال آخر حول تسخر من EF Code First.

لدي الآن طريقة لتحديثي تبدو كالتالي:

if (entity == null)
    throw new ArgumentNullException("entity");

Context.GetIDbSet<T>().Attach(entity);
Context.Entry(entity).State = EntityState.Modified;
Context.CommitChanges();

return entity;

السياق هو واجهة DbContext الخاصة بي.

المشكلة التي أقوم بها هي كيف أتعامل مع

Context.Entry(entity).State .

لقد صعدت من خلال هذا الرمز ويعمل عندما يكون لدي DbContext حقيقي حقيقي كتطبيق لواجهة السياق الخاصة بي. لكن عندما أضع سياستي المزورة هناك ، لا أعرف كيف أتعامل معها.

لا يوجد منشئ لفئة DbEntityEntry ، لذلك لا يمكنني إنشاء واحدة جديدة في سياق مزيف.

هل حقق أي شخص أي نجاح مع أي من السخرية أو التزوير DbEntityEntry في حلول CodeFirst الخاصة بك؟

أم أن هناك طريقة أفضل للتعامل مع تغييرات الدولة؟


تمامًا مثل الحالة الأخرى ، ما تحتاجه هو إضافة مستوى إضافي من indirection:

interface ISalesContext
{
    IDbSet<T> GetIDbSet<T>();
    void SetModified(object entity)
}

class SalesContext : DbContext, ISalesContext
{
    public IDbSet<T> GetIDbSet<T>()
    {
        return Set<T>();
    }

    public void SetModified(object entity)
    {
        Entry(entity).State = EntityState.Modified;
    }
}

لذلك ، بدلاً من استدعاء التطبيق ، يمكنك فقط استدعاء SetModified .





ef-code-first