私は学校のコード開発を始めており、私にはSchoolDbContext
があります。 Entity Frameworkの上のほとんどのドキュメントはがDbContext
からを導き出す提案:継承されずにDbContextを構成することはできますか?
public class SchoolDbContext : DbContext
{
public IDbSet<Student> Students => Set<Student>();
}
しかし、私の引数はSchoolDbContext
で、それだけではなく、そう、私の意見では、SchoolDbContext
はを構成する必要がありますDbContext
を利用している、DbContext
の専門ことはありませんDbContext
の:ASP.NET MVCアプリケーションの私の組成ルートで
public class SchoolDbContext
{
private readonly DbContext _dbContext;
public SchoolDbContext(DbContext dbContext)
{
_dbContext = dbContext;
}
public IDbSet<Student> Students => _dbContext.Set<Student>();
}
、私はこの組成APPRを試してみました
private static void RegisterDependencies(Container container)
{
// Assume I have a connection string SchoolDbContext
container.Register(() => new DbContext("SchoolDbContext"), Lifestyle.Scoped);
container.Register<SchoolDbContext>(Lifestyle.Scoped);
}
のWeb.config:
:私はStudents
をロードしようとすると、<connectionStrings> <add name="SchoolDbContext" providerName="System.Data.SqlClient" connectionString="Server=(localdb)\MSSQLLocalDB;Integrated Security=true"/> </connectionStrings>
これが失敗した(例として、単純なインジェクタを使用して)このように私の依存関係を設定してoach
エンティティタイプのStudentは、現在のコンテキストのモデルの一部ではありません。
私はそれを継承アプローチに戻します(つまり、デフォルトのコンストラクタnew SchoolDbContext()
を呼び出す)と、すべてが完全に機能します。
私の構成法はEntity Frameworkでサポートされていませんか?
あなたの意図は、アプリケーションの残りの部分からDbContextを非表示にする場合は、継承と組成の両方を行うことができます。 – Steven
@Steven、trueですが、私は 'DbContext'から低レベルのデータベースAPIのほとんどを必要としないので、継承よりも合成を優先する方法があるかどうかを調べようとしています。 – rexcfnghk