2017-01-07 6 views
2

Информация
У меня есть несколько проектов в моем решении, одним из которых является DAL, а другой - проект ASP.NET MVC6. Поскольку проект MVC6 также является проектом запуска, мне нужно добавить туда строку подключения.Использование нескольких строк подключения

Я видел this solution, но это не принято, и это не работает.

Моя Попробуйте
appsettings.json

"Data": { 
    "DefaultConnection": { 
    "ConnectionString": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true" 
    }, 
    "FooBar": { 
    "ConnectionString": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true" 
    } 
} 

Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddEntityFramework() 
     .AddSqlServer() 
     .AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])) 
      .AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration["Data:FooBar:ConnectionString"])); 
} 

Тем не менее, когда я пытаюсь получить доступ к данным, используя строку в FooBar соединения я получаю следующее сообщение:

Дополнительная информация: Ни одна строка связи с именем «FooBar» не может быть найдена в файле конфигурации приложения ».

Вопрос
Как получить несколько строк соединения работает?

ответ

4

Если вы посмотрите на official documentation for connection strings в ядре asp.net их пример показывает строку соединения, хранящуюся в appsettings.json как этот

{ 
    "ConnectionStrings": { 
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;" 
    }, 
} 

который, когда адаптированный к вашему примеру стал бы.

{ 
    "ConnectionStrings": { 
    "DefaultConnection": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true", 
    "FooBar": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true" 
    } 
} 

Настройка контекста в Startup.cs со строкой конфигурации считываются из конфигурации будет использовать метод GetConnectionString() с конфигурацией ключа

public void ConfigureServices(IServiceCollection services) { 
    // Add framework services. 
    services 
     .AddEntityFramework() 
     .AddSqlServer() 
     .AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnextionString("DefaultConnection")) 
     .AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnextionString("FooBar")); 
} 

Теперь один наблюдаемый вопрос с тем, как выше контекст настроен в оригинале вопрос в том, что в одном контексте есть две строки соединения.

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

+0

Вторая часть не работает. Я получаю сообщение об ошибке «Configuration.GetConnectionString»: «IConfigurationRoot» не содержит определения для «GetConnectionString», и никакой метод расширения «GetConnectionString», принимающий первый аргумент типа «IConfigurationRoot», не найден (вам не хватает использования директива или ссылка на сборку?) – Hypenate

+0

какая версия asp.net вы используете. проверьте, чтобы вы не пропускали пространство имен 'using'. – Nkosi

+0

И первая часть кажется, я получаю ArgumentNullException, указывающий на DefaultConnnection в файле запуска – Hypenate