2012-01-02 2 views
1

я получаю исключениеУказанная таблица не существует на SQL CE

The specified table does not exist [Limits] 

в то время как я пытаюсь экономить новый пункт

(App.Current as App).context.Limits.InsertOnSubmit(new Limit() { Date = DateTime.Now, Value = inputLimit });//this works 

(App.Current as App).context.SubmitChanges();//here I get exception 

Также я получаю ошибку на этой линии:

var currentLimit = (App.Current as App).context.Limits.Where(l => l.Date.Date == DateTime.Now.Date).FirstOrDefault(); 

«Предыдущая Следующая»

public class CalCounterContext:DataContext 
{ 
    public CalCounterContext(string connstring):base(connstring) 
    { 
    } 

    public Table<Limit> Limits; 
    public Table<Meal> Meals; 

} 

[Table] 
public class Limit 
{ 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "Int NOT NULL IDENTITY", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 
    public int Id { get; set; } 

    [Column] 
    public DateTime Date { get; set; } 

    [Column] 
    public int Value { get; set; } 
} 

Иногда это работает, иногда нет. Что может быть резонансом моей проблемы?

+0

Не могли бы вы предоставить полное сообщение об исключении, включая InnerException? – Nagg

+0

Вы проверяете, когда создается экземпляр вашего datacontext, если есть база данных. Не могли бы вы показать код, в котором вы создаете базу данных? – ChristiaanV

+0

Извините, что вы не ответили, но я не смог воспроизвести эту ошибку. Как только я получу это, я отвечу тебе. Спасибо за ваш интерес – user278618

ответ

3

Обычно это происходит, когда вы добавляете таблицу в более позднюю версию базы данных, затем то, что используется. Когда вы создаете контекст базы данных, проверьте, обновляется ли она, а если нет, обновите базу данных с помощью класса DatabaseSchemaUpdater как described here. Если это просто при создании приложения, удалите и переустановите приложение.

Кроме того, я столкнулся с странной проблемой, где с перерывами я получал эту ошибку даже после того, как приложение было в производстве без каких-либо рассуждений. Часто случается, когда я запускаю приложение, а затем ударяю по кнопке «домой» или «назад», чтобы быстро завершить его. Я в конечном итоге повторно реализации функции GetTable <> используется для создания экземпляра моего ITable переменную в базовом классе базы данных так, что он будет делать жесткий контроль, чтобы увидеть, если таблица на самом деле существовал:

public Table<TEntity> VerifyTable<TEntity>() where TEntity : class 
{ 
    var table = GetTable<TEntity>(); 
    try 
    { 
     // can call any function against the table to verify it exists 
     table.Any(); 
    } 
    catch (DbException exception) 
    { 
     if (exception.Message.StartsWith("The specified table does not exist.")) 
     { 
      var databaseSchemaUpdater = this.CreateDatabaseSchemaUpdater(); 
      databaseSchemaUpdater.AddTable<TEntity>(); 
      databaseSchemaUpdater.Execute(); 
     } 
     else 
     { 
      throw; 
     } 
    } 
    return table; 
} 
+0

благодаря BK ссылка http://msdn.microsoft.com/en-us/library/hh394022%28v=vs.92%29.aspx в вашем сообщении действительно помогла мне. –

+0

Недавно я столкнулся с этой проблемой, спасибо за ответ! –

0

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

Смежные вопросы