使用N层存储库模式Visual studio项目启用迁移
本文关键字:studio 项目 启用 迁移 Visual 模式 存储 使用 | 更新日期: 2023-09-27 18:27:13
使用N层应用程序。有存储库层、服务层和表示层项目。只有存储库层引用了实体框架。只有Presentation Layer(web.config)具有配置字符串。我已经使用IDbContextFactory
和依赖注入来注入配置
如何启用迁移它给出错误
正在检查上下文是否以现有数据库为目标。。。System.ArgumentException:参数"nameOrConnectionString"不能为null、为空或仅包含空格。位于System.Data.Entity.Utilities.Check.NotEmpty(字符串值,字符串参数名称)处的System.Data.Eentity.DbContext.ctor(字符串名称或连接字符串)
正如我所提到的,连接字符串(配置)是从表示层注入的,我正在使用Autofac进行DI
这是存储库层中使用的上下文工厂
public class MyContextFactory : IDbContextFactory<MyContext>
{
public ILogger Logger { get; set; }
private readonly string _configuration;
public MyContextFactory(string configuration)
{
_configuration = configuration;
}
public MyContextFactory()
{
}
public MyContext Create()
{
var dbcontext =new MyContext(_configuration, Logger);
return dbcontext;
}
}
使其工作的答案是将连接字符串添加到存储库项目的app.config
中。(只需从web.config
复制)
当您将迁移指向该项目时,我认为知道在哪里查找连接字符串还不够明智。
经过大量研究(大约2天),我得到了解决方案:在DbContext类中添加以下无参数构造函数,并在进行迁移时使web项目成为启动项目(即启用迁移、在PM控制台中添加迁移等命令)
#region Needed For migrations
private static string ConnectionStringForMigration()
{
return ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
}
public MyContext()
: base(MyContext.ConnectionStringForMigration())
{
}
#endregion