我的项目中有两个DbContext
:ApplicationDbContext
用于ApplicationUser
模型(继承自ASP.NET身份IdentityUser
类)和EFDbContext
用于所有其他模型。
他们使用一个数据库。
我为每个上下文创建了两个数据库初始值设定项:
public class ApplicationDbInitializer :
DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context)
{
// add Admin role and user
... code here
//
base.Seed(context);
}
}
和
public class EFDbInitializer : DropCreateDatabaseAlways<EFDbContext>
{
protected override void Seed(EFDbContext context)
{
}
}
问题:
我在App
中遇到这样的错误类型&#39; System.Data.SqlClient.SqlException&#39;的异常发生在 EntityFramework.dll但未在用户代码中处理
其他信息:无法删除数据库&#34; DatabaseName&#34;因为 它目前正在使用中。
我认为它尝试使用一个上下文初始化程序重新创建数据库,但数据库正在由另一个上下文使用。
如何处理此类错误?
答案 0 :(得分:2)
大多数情况下,对相同的数据库使用多个db-contexts被认为是一种不好的做法。但如果你真的需要这个,我引用了来自here的Ladislav Mrnka的好答案:
问题在于,当您想首先使用代码创建数据库时 - 应用程序中只有单个上下文可以执行此操作。这方面的技巧通常是一个附加的上下文,其中包含仅用于创建数据库的所有实体。只包含实体子集的真实应用程序上下文必须将数据库初始化程序设置为null。