2015-12-18 3 views
0

Использование приложения N-уровня. Существуют проекты уровня хранилища, уровня обслуживания и уровня представления. Только слой репозитория имеет ссылку на структуру сущности. Только уровень представления (web.config) имеет строку конфигурации. Я использовал IDbContextFactory и Dependency Injection, чтобы придать конфигурациюВключить миграцию с шаблоном репозитория N-Tier Проект Visual studio

Как включить миграции Это дает ошибку

Проверяется контекст цели существующей базы данных ... System.ArgumentException: Аргумент «nameOrConnectionString» не может быть null, пусто или содержать только пробел. на System.Data.Entity.Utilities.Check.NotEmpty (значение String, String ParameterName) в System.Data.Entity.DbContext..ctor (Строка nameOrConnectionString)

Как я упоминал строку соединения (конфигурации) является впрыскивается из уровня представления я использую Autofac для DI

Вот завод Context, используемые в хранилище слоя

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; 
     } 
    } 
+0

Можете ли вы показать свой код? Эта ошибка явно указывает, что вы забыли передать строку подключения. – Kamo

+0

Код работает, я разработал его, не включив миграции ... Как я уже упоминал, строка подключения вводится с уровня Presentation, я использую Autofac для DI – Thunder

ответ

0

сделать его работу ответа будет добавить строку в соединении в проект app.config вашего проекта репозитория. (Просто скопируйте его из web.config)

Когда вы указываете миграции на этот проект, я не думаю, что это достаточно умен, чтобы знать, где искать для строки подключения.

0

После долгих исследований (почти 2 дня) я получил решение: Добавьте следующий конструктор с уменьшением конструктора в класс DbContext. Также создайте веб-проект для запуска проекта при работе с миграциями (например, такие команды, как enable-migration , добавление-миграция в консоли PM.)

#region Needed For migrations 
     private static string ConnectionStringForMigration() 
     { 
      return ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     } 

     public MyContext() 
      : base(MyContext.ConnectionStringForMigration()) 
     { 

     } 
     #endregion 
Смежные вопросы