Как сделать LINQ to SQL обратно совместимым - PullRequest
1 голос
/ 21 октября 2009

Я новичок в LINQ to SQL .... Мне нужно добавить новый столбец в существующую таблицу, и я обновил dbml, чтобы включить это новое поле. Затем в моем коде C # я запрашиваю базу данных и получаю доступ к этому новому полю. Все хорошо с новой базой данных; однако, если я загружу предыдущую базу данных без этого нового поля, моя программа потерпит крах при обращении к базе данных (очевидно, из-за этого нового поля). Как мне сделать это, базу данных или мой код C # для поддержки обратной совместимости?

Вот мой фрагмент кода

Я добавил поле электронной почты в таблицу Customer, а также добавил его в DataContext.dbml, ниже приведен код c #

DataContext ctx = new DataConext ();
var cusList = ctx.Customer;
foreach (var c in cusList)
{
.
.
.
//access the new field
if (c.email != null)
   displayEmail (email);

.
.
.
}

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 21 октября 2009

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

1 голос
/ 21 октября 2009

Убедитесь, что вы обновили старую базу данных. Вот для чего сделаны обновления.

Я не думаю, что есть лучший вариант. Но я могу ошибаться.

0 голосов
/ 22 октября 2009

Я согласен с Арнисом Л .: Обновите вашу старую базу данных. LTS захочет найти в вашей таблице этот столбец, называемый email, и будет жаловаться, если не сможет его найти. Я мог бы предложить обходной путь, который влечет за собой использование хранимой процедуры, но вам нужно обновить старую базу данных, чтобы использовать этот хранимый процесс, так что это не очень полезное предложение: -)

Как обновить старую базу? Это старая школа:

ALTER TABLE Customers
ADD Email VARCHAR(130) NULL

Вы можете выполнить это вручную для более старой базы данных, например, с помощью Query Analyzer. Смотрите здесь для полной документации на ALTER TABLE: http://msdn.microsoft.com/en-us/library/aa275462%28SQL.80%29.aspx

Если вы работаете в команде с очень строгими процедурами развертывания от разработки к производственным системам, вы уже будете писать свои «сценарии изменения» в базу данных таким же образом. Однако, если вы разрабатываете с помощью Enterprise Manager, может показаться непродуктивным, что вам придется выполнять ту же работу во второй раз, просто чтобы синхронизировать старые схемы базы данных с последней схемой.

Для более дружественного, более "липкого" подхода к этому последнему стилю разработки я сам не могу рекомендовать достаточно использовать что-то вроде превосходных инструментов Red Gate SQL Compare, чтобы помочь вам синхронизировать несколько баз данных SQL Server. (Существуют и другие сторонние утилиты, которые, предположительно, могут делать то же самое, и это может быть даже немного дешевле, но я не стал вдаваться в подробности.)

Удачи!
- Майк

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