SQL Server CE таблица не найдена ошибка - PullRequest
0 голосов
/ 15 января 2012

Я пытаюсь использовать SQL Server CE на Windows Phone Mango.Вот мой DataContext:

public class FooDataContext : DataContext
{
    private static readonly string DB_CONNECTION_STRING = "Data Source=isostore:/foo.sdf";

    // Pass the connection string to the base class.
    public FooDataContext() : base(DB_CONNECTION_STRING)
    { }

    // can this be a property?
    public Table<Foo> Items;

    public void ClearDatabase()
    {
        if (DatabaseExists())
        {
            DeleteDatabase();
        }
    }

    public void EnsureDatabaseExists()
    {
        if (!DatabaseExists())
        {
            CreateDatabase();
            SubmitChanges();
        }
    }
}

В конструкторе главной страницы я вызываю EnsureDatabaseExists().Если я изменил схему, я также включил вызов ClearDatabase():

//fooData.ClearDatabase();
fooData.EnsureDatabaseExists();

Foo столбцы int, double и DateTime.Когда я запускаю приложение без вызова ClearDatabase(), я получаю следующую ошибку, как только пытаюсь получить доступ к fooContext.Items:

Указанная таблица не существует.[Foo]

Что здесь происходит?Если я только что установил приложение, все работает нормально.

1 Ответ

1 голос
/ 15 января 2012

Структуры вспомогательных таблиц для Linq To SQL DataContext создаются только при вызове CreateDatabase () или при явном обновлении схемы с помощью метода DatabaseSchemaUpdater.Execute ().

Я подозреваю, что происходитв вашем случае это то, что вы добавляете новый тип сущности в модель данных, однако на самом деле вы не обновляете схему через DatabaseSchemaUpdater.Это приводит к тому, что Linq To SQL генерирует запрос, который ссылается на таблицу, которая еще не была создана в ядре базы данных.

Я бы порекомендовал вам проверить класс DatabaseSchemaUpdater, если вы хотите иметь возможность обрабатывать изменения схемыв вашем приложении.

http://msdn.microsoft.com/en-us/library/hh133477(v=VS.95).aspx

...