После нескольких экспериментов было найдено адекватное решение (которое соответствует моей цели).
Вопрос был сфокусирован на старых 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 не требовалось --- и быстрое решение для этого не было найдено.