ОБНОВЛЕНИЕ: Я написал совет в своем блоге в моей серии советов , чтобы рассказать об этом чуть подробнее.
-
Как вы уже догадались, ключом к этому является ProviderManifestToken.
EF использует это, чтобы установить, какие типы баз данных доступны.
Очевидно, что если часть SSDL (модель хранилища или модели базы данных) типов ссылок EDMX не поддерживается в конкретной версии SQL-сервера, вам потребуется изменить не только ProviderManifestToken, но и заменить все ссылки на типы, не поддерживаемые в целевая версия тоже.
Один из подходов к этому состоит в том, чтобы трактовать часть файла SSDL как нечто, что может быть заменено во время выполнения.
Для этого вам нужно извлечь CSDL / MSL / SSDL в файлы, а не встраивать их в сборку, как это стандартно:
- Щелкните правой кнопкой мыши дизайнер
холст
- Выбрать свойства
- Установите для параметра «Обработка артефактов метаданных» значение «Копировать в выходной каталог»
- Сложение
- Теперь вам нужно скопировать файл SSDL (в bin \ debug) и изменить его для работы с SQL2005, заменив ссылки на DateTime2 на DateTime и т. Д.
- Затем во время выполнения при создании контекста объекта вам нужно вручную создать ConnectionString, чтобы он указывал на правильный SSDL ...
И используйте это так:
var connStr = @"metadata=.\model.csdl|.\modelSQL2005.ssdl|.\model.msl;
provider=System.Data.SqlClient;
provider connection string="
Data Source=.\SQLEXPRESS;
Initial Catalog=TipsDatabase;
Integrated Security=True;
MultipleActiveResultSets=True
"";
using (var ctx = new MyContext(connStr))
{
}
Я знаю, что это не идеально, но, по крайней мере, оно дает вам работоспособное решение.
Надеюсь, это поможет
Alex