使用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;
        }
    }

使用N层存储库模式Visual studio项目启用迁移

使其工作的答案是将连接字符串添加到存储库项目的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