LINQPad создает базу данных sqlite в запросе C # - PullRequest
2 голосов
/ 17 ноября 2011

Плагин IQ Connection для LINQPad, позволяющий использовать SQLite, имеет флажок «Создать базу данных, если отсутствует», но при этом создается только пустой файл. Есть ли способ автоматически создавать таблицы, когда файл не существует?

Не должен ли быть способ получить DataContext и создать таблицы с использованием этого интерфейса? Надеемся, что LINQPad одновременно обновит свой DataContext.

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

void Main()
{
    if (!File.Exists(this.Connection.ConnectionString.Split('=')[1]))
    {
        "CREATING DATABASE TABLES".Dump();
        CREATE_TABLES();
    }
    else
    {
        "RUNNING CODE".Dump();
        //Code goes here...
    }
}

public void CREATE_TABLES()
{
    this.Connection.Open();
    System.Data.Common.DbCommand sup = this.Connection.CreateCommand();
    sup.CommandText = @"create table MainTable
(
    MainTableID INTEGER not null PRIMARY KEY AUTOINCREMENT,
    FileName nvarchar(500) not null
)";
    sup.ExecuteNonQuery();
    sup.CommandText = @"create table SubTable
(
    SubTableID int not null,
    MainTableID int not null,
    Count int not null,
    primary key (SubTableID, MainTableID),
    FOREIGN KEY(MainTableID) REFERENCES MainTable(MainTableID)
)";
    //Apparently this version of sqlite doesn't support foreign keys really
    sup.ExecuteNonQuery();
    this.Connection.Close();
}

1 Ответ

2 голосов
/ 17 ноября 2011

Просто установите раскрывающийся список языка запросов на «SQL», введите DDL и нажмите F5.Например:

PRAGMA foreign_keys = ON
GO

create table Customer
(
    ID int not null primary key,
    Name nvarchar(30) not null
)
GO

create table Purchase
(
    ID int not null primary key,
    CustomerID int null references Customer (ID),
    Date datetime not null,
    Description varchar(30) not null,
    Price decimal not null
)

(обратите внимание на синтаксис для создания ограничений внешнего ключа.)

По завершении щелкните правой кнопкой мыши соединение в проводнике схем и выберите «Обновить».Затем вы можете переключить язык запроса обратно на Выражение C # или Выражения C # и начать запросы на соответствующем языке запросов:)

...