1

ASP.NET MVC 4 と Entity Framework はまだ初心者です。しかし、私は両方のフレームワークを使用してアプリケーションに貢献し始めObjectContextModelContainer. テスト環境で簡単にモックすることはできず、多くのメソッドとプロパティがあります (そのため、インターフェイスなどを前に置くことは最善のアイデアではない可能性があります)。

たとえば、次のプロパティが多数あります。

public ObjectSet<Company> Companies { \\ ... }

私の考えは、次のような単純なインターフェースを作成することでした。

public interface IDB
{
    IQueryable<T> GetQueryableObjects<T>();
}

そして怪物用のアダプターを作成します。

public class ModelContainerDB : IDB
{
    private readonly ModelContainer _db;
    private static readonly Type _dbType = typeof(ModelContainer);

    public ModelContainerDB(ModelContainer db)
    {
        _db = db;
    }

    public IQueryable<T> GetQueryableObjects<T>()
    {
        var objectType = typeof (T);
        var queryableName = GetPropertyName(objectType.Name);
        var propertyInfo = _dbType.GetProperty(queryableName, BindingFlags.Public | BindingFlags.Instance);
        return (IQueryable<T>) propertyInfo.GetValue(_db, new object[0]);
    }

    private string GetPropertyName(string objectName)
    {
        if (objectName.EndsWith("y"))
            return objectName.Remove(objectName.Length - 1) + "ies";

        return objectName + "s";
    }
}

リフレクションが遅いことは知っていますが、このシナリオではちょっといいです。だから私の質問は:

  1. このアプローチの欠点は何ですか?
  2. 何を改善できますか?
  3. ObjectContext実装をラップするという最初の問題に対する他のアプローチはありますか?
4

1 に答える 1

2

以下を使用する汎用メソッドを作成できますCreateObjectSet<T>

public IQueryable<T> GetQueryableObjects<T>()
{       
    return _db.CreateObjectSet<T>();
}
于 2013-10-24T07:25:26.830 に答える