Я изучаю asp.net mvc 4 поверх структуры сущностей. Я взял на себя работу над проектом, и я пытаюсь централизовать учетные данные для подключения в зависимости от среды (dev, test, prod), в которой находится приложение.
В настоящее время у меня есть динамическая строка подключения, но по какой-то причине структура сущности игнорирует начальную настройку каталога строки подключения.
<connectionStrings>
<add name="name1" connectionString="metadata=res://*/Model.csdl|res: //*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="Data Source=001\;Initial Catalog=**;Integrated Security=False;User ID=**;Password=**;MultipleActiveResultSets=True;Application Name=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="name2" connectionString="metadata=res://*/Entites.csdl|res://*/Entites.ssdl|res://*/Entites.msl;provider=System.Data.SqlClient;provider connection string="data source=001\;Persist Security Info=True;User ID=**;password=**;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
I have no idea what half of the stuff in the connectionString means, but it is the second connection string giving me troubles, "name2"
Запуск отладчика показывает базовый класс, который расширяет ObjectContext, который называется так,
: base ("имя = имя2", "имя2")
Я полагал, что исходный каталог уже был установлен в строке подключения, «name1», и это будет перенесено на name2 ... но, черт возьми, я добавил исходный каталог во вторую строку подключения, и он по-прежнему по умолчанию использует неправильный каталог. Я подключаюсь к тому же серверу базы данных, но у нас есть тестовая и производственная база данных.
Что могло переопределить эту настройку каталога и перенаправить на неправильную базу данных? Когда я запускаю свой код, я получаю внутреннее исключение, сообщающее мне, что имя пользователя (имя пользователя тестовой базы данных) не имеет доступа к производственной базе данных, но я не уверен, почему производственная база данных передается.
Вот исключение:
Основной сервер testuser не может получить доступ к базе данных ProductionName в текущем контексте безопасности.]
инициализация ObjectContext
public Entities() : base("name=name2", "name2")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
Это также есть в файлах web.config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Я заметил еще кое-что интересное. Когда я оставляю настройку «Исходный каталог» в строке подключения «name2» и устанавливаю тестовую базу данных, и все учетные данные верны, я получаю исходную ошибку, как я написал. Если я изменю исходный каталог на производственное имя и оставлю неправильные учетные данные для входа в систему, я получаю сообщение об ошибке входа в систему. То же самое, если я изменю учетные данные и оставлю тестовую базу данных для исходного каталога. Кажется, что аутентификация проходит правильно, но что-то еще имеет значение, когда соединение проходит?
data source=001\
, чтобы оно читалось какdata source=001
? - person David Tansey   schedule 23.05.2015