繁体   English   中英

实体框架代码优先:两个DbContext和一个数据库初始化程序

[英]Entity Framework Code First : Two DbContext and one database initializers

我的项目中有两个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中收到这样的错误

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

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

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

如何处理此类错误?

在大多数情况下,对同一数据库使用多个db-context被认为是不好的做法。 但如果你真的需要这个,我引述由拉吉斯拉夫Mrnka从伟大的答案在这里

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM