抽象ベースから継承するコンテキスト クラスがありますAuditableDbContext : DbContext
。はAuditableDbContext
2 つのパラメーターを使用します。1 つは監査者用で、もう 1 つは監査対象のコンテキスト用です。
継承されたクラスには、null パラメーターを使用して他のコンストラクターを呼び出す既定のパラメーターなしのコンストラクターがあり、最終コンストラクターではDatabase.SetInitializer<MyDbContext>(null)
、基本コンストラクターを呼び出した後に呼び出します。
問題は、これを行っても、アプリケーションの起動時にデータベース サーバーで db migration 呼び出しが引き続き発生することです。
public abstract class AuditableContext : DbContext
{
public AuditableContext(IAuditor auditor, DbContext auditContext)
{
// params can be null resulting in no auditing
// initialization stuff here...
}
}
public class MyDbContext : AuditableContext
{
// DbSets here...
public MyDbContext() : this(null, null) {}
public MyDbContext(IAuditor auditor) : this(auditor, null) {}
public MyDbContext(IAuditor auditor, DbContext auditContext)
: base(auditor, auditContext)
{
Database.SetInitializer<MyDbContext>(null);
}
}
データベースで見られるクエリは、2 つの一般的な移行クエリです...
SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
) AS [GroupBy1]
SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[ModelHash] AS [ModelHash]
FROM [dbo].[EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC
Entity Framework がこれらのクエリを作成するのを止める方法についてのアイデアはありますか?