LINQ to SQL и файл DBML - разработка нескольких баз данных - PullRequest
3 голосов
/ 11 августа 2009

Способ, которым я развиваюсь, может быть неправильным, любые советы приветствуются.

На данный момент у меня есть приложение WPF, которое использует базу данных SQL2008. У меня есть копия базы данных на ноутбуке и на моем домашнем компьютере. Мое приложение имеет версию с использованием SVN, и я, очевидно, могу перейти с рабочего ноутбука на домашний компьютер и обновить / зафиксировать, как требуется, чтобы убедиться, что я использую последний код приложения.

Однако база данных - это отдельная история, в которой я делаю любое изменение, которое я создаю, а затем переношу его на другой компьютер и т. Д. Таким образом, я получаю данные и изменения, сделанные в каждой системе. Для этого для соединения с базой данных используется другая строка соединения, и я изменяю настройку в своем приложении, чтобы использовать другое соединение в зависимости от моего местоположения.

Теперь я начал использовать файлы LINQ to SQL и DBML в своем приложении, и, наконец, до вопроса, я не знаю, как я могу изменить строку соединения, используемую в коде, чтобы она использовала правильную базу данных в DBML.

Кроме того, есть ли лучший способ перенести базу данных, чтобы мне не нужно было выполнять резервное копирование и восстановление? Единственная причина, по которой я не установил версию схемы, заключается в том, что я не уверен, как она будет обрабатывать мои данные, поскольку это является ключом к моей разработке, то есть различные параметры среды и т. Д. Хранятся в БД и передаются во время выполнения.

Ответы [ 5 ]

1 голос
/ 01 февраля 2010

Ваше заявление: Теперь я начал использовать файлы LINQ to SQL и DBML в своем приложении, и, наконец, до вопроса, я не знаю, как я могу изменить строку соединения, используемую в коде, чтобы она использовала правильную базу данных в DBML. 1001 *

Да, это возможно.

MYDataContext mycontext = new MYDataContext ("Строка подключения");

Существует конструктор, в котором можно изменить строку подключения.

1 голос
/ 11 августа 2009

Это такая распространенная проблема, и я никогда не находил минимального и чистого решения. Как синхронизировать все значения, переменные, базы данных и исходные файлы между компьютерами?

  • Ну, SVN отлично работает с исходными файлами.
  • Для базы данных я ПЫТАЮСЬ использовать только одну БД, если нам это удастся. Все разработчики указывают на один компьютер, на котором размещена БД, поэтому мы не тратим время на настройку и объединение БД. Если это невозможно, то мы обычно просто сбрасываем базу данных, когда происходит изменение, и распространяем файл .bak. Вы можете попробовать добавить этот файл в SVN, и он работает. Вы даже можете создать дамп БД по расписанию, чтобы SVN всегда получал новую копию. Но это все еще слишком много работы, чтобы продолжать восстанавливать БД снова и снова. Возможно, вы могли бы подключить некоторые сценарии к SVN (мы используем Tortise для Windows) и иметь работу, которая делала бы это автоматически. Это было бы хорошо.

  • Для файлов конфигурации - я использую ASP.NET, поэтому у меня есть web.config, connectionstrings.config и т. Д., Я делаю одну из двух вещей - либо просто вручную копирую разделы, которые необходимо изменить между машинами, и комментирую часть, которую не нужно использовать (неуклюжая), или я иногда писал вспомогательные объекты ConfigurationSettings, которые диагностируют ключ конфигурации, чтобы решить, какой параметр использовать, основываясь на текущем имени компьютера. например:

Скажите, что моя текущая машина DEV1. Сервер СЕРВЕР1. У меня будут ключи конфигурации с такими именами, как DEV1.connections.sqlserver и SERVER1.connections.sqlserver. В коде я буду использовать вспомогательный метод GetConfig ("connections.sqlserver"). GetConfig выясняет, какой ключ использовать, основываясь на имени текущего компьютера.

Используя этот метод, мне не нужно постоянно напоминать о дюжине .configs каждый раз, когда я загружаю на сервер или что-то меняю. Но я ДОЛЖЕН сделать дубликат ключа для каждой машины, на которой будет запущено приложение, что может принести немало. Для больших команд вместо имен компьютеров я использую имена групп и имею ключ конфигурации, который назначает имена компьютеров группе - с той идеей, что на каждом компьютере в группе это приложение будет настроено одинаковым образом - одинаковые пути к файлам и т.д.

Теперь перейдем ко второму вопросу о LINQ - когда вы создаете linq dbml, он добавит строку соединения в вашу конфигурацию. вам просто нужно убедиться, что вы нашли эту строку подключения и скопировали ее в ваше активное приложение. например:

У меня есть решение, которое имеет 2 проекта: 1 - сайт 2 - библиотека

Я поместил dbml в проект библиотеки. Если я пойду и посмотрю в App.config проекта библиотеки, я увижу строку подключения, которую LINQ хочет использовать. Если я скопирую эту строку подключения в файл connectionstrings.confing на веб-сайте, при ссылке на библиотеку и запуске веб-сайта LINQ сможет увидеть строку подключения, которую он хочет использовать.

0 голосов
/ 09 сентября 2009

Я просто использовал несколько строк подключения, а затем вручную менял соединение в файле dbml при каждом перемещении местоположений. Однако у меня также есть некоторый код для его программного изменения в зависимости от настроек проекта для местоположения.

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

0 голосов
/ 11 августа 2009

Вы можете использовать SQL COmpare и SQLDataCompare для red_gate для записи изменений в базу данных. Вы все равно должны иметь привычку писать сценарии изменений базы данных, так как это то, что вам нужно будет сделать, когда придет время переносить изменения в prod. Я также хотел бы убедиться, что все изменения в базе данных внесены в SVN, мы никогда не вносим никаких изменений в базу данных без сценария управления исходным кодом.

0 голосов
/ 11 августа 2009

Вы можете попробовать Sql Server Merge Replication и использовать SQL Compact 3.5 в качестве базы данных своего ноутбука и использовать master в качестве базы данных своего рабочего / домашнего компьютера. Однако вы можете сделать это только с Sql Server Standard Edition.

Другой вариант - Microsoft Sync Framework .. здесь ..

http://msdn.microsoft.com/en-us/sync/default.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...