10

最初に EF Code を使用しており、販売データベースのデータ コンテキストがあります。さらに、データ コンテキストの上に位置し、いくつかの基本的な CRUD 操作を実行するクラスがあります。

たとえば、次の関数があります。

public static T Create<T>(int userId, T entity) where T : class, IAllowCreate
{
    if (entity == null)
        throw new ArgumentNullException("entity");

    using (SalesContext dc = new SalesContext())
    {
         dc.Set<T>().Add(entity);
         dc.SaveChanges();

         return entity;
    }
}

偽のコンテキストと IDBset プロパティを作成する方法の例を見つけました。私はそれを実装し始めましたが、問題に遭遇しました。

汎用の CRUD メソッドを作成しようとするため、コードでは dc.Set() をかなり自由に (上記のように) 使用します。ReadCustomer、ReadContact などを使用する代わりに、Read() を実行します。ただし、dc.Set は IDbSet ではなく DbSet を返すため、それをモックすることはできません。

DbContext をモックまたは偽造して、まだ Set 機能を使用できた人はいますか?

4

1 に答える 1

11
interface ISalesContext
{
    IDbSet<T> GetIDbSet<T>();
}

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

別の名前を使用しましたがnew、通常の実装を非表示にする場合は、演算子を使用できます。

于 2011-02-15T17:37:09.590 に答える