【问题标题】:Entity Framework Code First : Two DbContext and one database initializers实体框架代码优先:两个 DbContext 和一个数据库初始化程序
【发布时间】:2015-01-15 08:50:47
【问题描述】:

我的项目中有两个 DbContextApplicationDbContext 用于 ApplicationUser 模型(继承自 ASP.NET Identity 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 中遇到这样的错误

“System.Data.SqlClient.SqlException”类型的异常发生在 EntityFramework.dll 但未在用户代码中处理

附加信息:无法删除数据库“DatabaseName”,因为 它目前正在使用中。

我认为它尝试使用一个上下文初始化程序重新创建数据库,但数据库正在被另一个上下文使用。

如何处理这样的错误?

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework


    【解决方案1】:

    在大多数情况下,为 same 数据库使用多个 db-contexts 被认为是一种不好的做法。但是,如果您真的需要这个,我将引用来自 here 的 Ladislav Mrnka 的精彩回答:

    问题是当您想首先使用代码来创建数据库时 - 只有应用程序中的单个上下文可以做到这一点。这样做的技巧通常是一个包含所有实体的附加上下文,该上下文仅用于创建数据库。仅包含实体子集的真实应用程序上下文必须将数据库初始化程序设置为 null。

    【讨论】:

    猜你喜欢
    • 2013-07-04
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多