Указанная таблица не существует на sql ce - PullRequest
1 голос
/ 02 января 2012

Я получаю исключение

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; }
}

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

Ответы [ 2 ]

3 голосов
/ 20 января 2012

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

Кроме того, я столкнулся со странной проблемой, когда периодически я получал эту ошибку, даже если приложение было запущено без каких-либо причин.,Часто происходит, когда я запускаю приложение, а затем нажимаю кнопку возврата домой или назад, чтобы быстро завершить его.Я закончил тем, что заново реализовал функцию 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 голосов
/ 05 июля 2012

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

...