EFのdbContextオブジェクトを削除していることを確認します。MVCコントローラでEF DBContextを処理する
現在、静的メソッドを使用して、すべてのデータレイヤーの項目をブラックボックス化してコントローラーから除外するEFクラッシュ操作を呼び出しています。
以下の例では、IQueryableを返す1つのメソッドがあり、クエリが配置済みコンテキストオブジェクトで実行しようとすると例外が発生するUsingステートメントが使用されています。
もう1つはUsingステートメントを使用せず、うまく動作しますが、処分されていますか?
IQueryableではなくIEnumerableを返すだけでよいですか?
public class MyContext : DbContext
{
public MyContext() : base("MyConnectionString")
{
Database.SetInitializer<EFContext>(null);
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
public class Data
{
// Fails when IQuerable tried to run against a disposed MyContext object
public static T Get<T>(params string[] joins)
{
using (var context = new MyContext())
{
return context.Get<T>(joins);
}
}
// Works fine but when is it disposed?
public static T Get<T>(params string[] joins)
{
return new MyContext().Get<T>(joins);
}
}
public ActionResult GetUser(int id = 0)
{
var data = Data.Get<User>();
return View("Users", model);
}
私はDIに精通していますが、私は私のOPで述べたように、データアクセスをUIレイヤーから外してブラックボックス化したいと考えています。 APIのように使用するのはほぼ – user3953989
DIです。インターフェース/抽象を再びプログラムするので、あなたがやろうとしているブラックボックス化されたものを含むすべてのソリッドの原則に従います。 – CodeNotFound
この例を追加できますか? – user3953989