$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
Создайте частичный класс, который совпадает с вашим контекстом данных, и используйте этот код, чтобы принудительно использовать строку web.config вместо app.config. Поместите частичный класс в то же место, что и ваша модель в библиотеке классов.
public partial class YourDataContext
{
partial void OnCreated()
{
ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["PrimaryConnectionString"];
if (cs != null)
{
this.Connection.ConnectionString = cs.ConnectionString;
}
}
}
См. Этот вопрос для получения дополнительной информации Предпочитаемый метод для строки подключения в библиотеке классов
RichardOD опубликовал ссылку на то, что, на мой взгляд, лучше всего описывает наши проблема LINQ To SQL и значение строки соединения Web.Config
Ничего страшного. Поместите строку подключения модели в Web.config и забудьте (удалите) файл конфигурации модели.
DataContext также принимает строку подключения в своем конструкторе, поэтому вы также можете указать ее таким образом (хотя, возможно, не в одной строке) :
DataContext context = new DataContext(ConfigurationManager.ConnectionStrings["TheKey"].ConnectionString);
Править - судя по вашим комментариям к другим ответам, похоже, что вы делаете что-то не так. Если вы это делаете, то сгенерированный код будет использовать значение настройки по умолчанию.
System.Configuration.DefaultSettingValueAttribute("Data Source=SERVER;Initial Catalog=XYZ;Integrated Security=True")].
Возможно, вы сделали ошибку , неправильно указав строку подключения в файле Web.config.
I'd say that you should keep the configuration of the product in the web project's web.config, and then inject the configuration you use into the model project.
Ok, I'm guessing here, but it looks like both projects use an identical connection string, yes?
In that case, only specify the connection string in the web.config; the class library app.config will not be read by ASP.NET anyway.
Я думаю, что строка подключения в библиотеке моделей просто используется дизайнером. Во время выполнения строка загружается из файла web.config. Таким образом, вам не обязательно синхронизировать строки.
You don't need the class library app.config. Just put your configuration at the web.config. Also, if you need some configuration section from the library's app.config, just put it on the web.config. The ConfigurationManager will read it from there.
Лично я расширяю DataContext в моем репозитории, а затем делаю что-то вроде:
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
Таким образом, мой репозиторий может быть создан, и я никогда не беспокоюсь о настройке соединения или о том, что с этим вообще нужно иметь дело . Чтобы перейти на / из баз данных dev / live, я просто меняю свой файл web.config.
Если ваша библиотека классов моделей упоминается в вашем веб-приложении, вы можете просто удалить ссылку в файле App.Config и убедиться, что у вас есть что-то похожее на то, что размещено в вашей сети. config. Таким образом, когда компилятор просматривает файл web.config, он найдет строку подключения, необходимую для проекта MVC, и, следовательно, не будет необходимости искать ее дальше.
Файл app.config в библиотеке не повлияет на производство - те Строки подключения действительно существуют для дизайнера linq2sql. Не на что смотреть, идите вперед, это не те дроиды, которые мы ищем. . .