0

MigrateDatabaseToLatestVersion. Обновлена ​​база данных, которая хранится в SQL Server Express.Первая миграция кода для файла базы данных SQL Server CE

При открытии локального сохраненного файла .sdf (базы данных SQL Server CE) с допустимым путем и именем файла этот файл не обновляется.

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DTDataContext, Configuration>()); 
var connection = DTDataContext.GetConnectionSqlServerCE40(fullPathName); 

dataBaseContext = new DTDataContext(connection, true); 
dataBaseContext.Database.Initialize(true); 

The MigrationHistory записи будут сделаны в SQL Server Express, а не в локальном файле базы данных SQL Server CE.

Что было бы самым простым способом обновления локального файла базы данных SQL Server CE?

ответ

0

После нескольких экспериментов было найдено адекватное решение (которое соответствует моей цели).

Вопрос был сфокусирован на старых sdf (s), которые были ранее написаны, но с более старой моделью в отличие от кода. Я решил не переносить старые файлы (которые применяются как вид резервных копий). Только чтение будет производиться в этих файлах. Очевидно, возможно, что новые sdf (ы) будут прочитаны один раз в будущем, но это не имеет большого значения. Прежде чем читать материал сущности, которая может отсутствовать (в формате sdf), она будет проверяться через SqlQuery и count(*).

 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] 
     private bool TestIfTableExists(string tableName, DTDataContext dataContext) 
     { 
      try 
      { 
       int cnt = dataContext.Database.SqlQuery<int>("select count(*) from " + tableName).First(); 
       return cnt > 0; 
      } 
      catch(Exception ex) { /*available SqlCeException assembly does not fit --- table does not exist*/ return false; } 
     } 

Кстати При использовании SqlCeException (V3.5), которая может быть предоставлена ​​в качестве ссылки с помощью поиска сборки, вышеописанная ситуация потерпит неудачу (= необработанное исключение!). Не тестировали его с помощью v4, потому что я хочу избежать ссылки «вручную», потому что он должен быть проверен (нет необходимости в каких-либо проблемах с другими рабочими станциями).

Относительно написания sdf: При написании нового файла sdf с текущей моделью это не проблема.

Database.CreateIfNotExists() был применен.

В моем случае обновление sdf не требовалось --- и быстрое решение для этого не было найдено.