使用 Linq to Sqlite (linq2db) 创建表

问题描述 投票:0回答:3

我想做的是在空数据库上打开连接时动态创建一个

table
。我已经使用
Linq
Sqlite
创建了模型,并成功将其用于非空数据库。

现在我正在尝试使用“新”数据库。

我的 db.Insert 是这样的:

    using (MyDB db = MyDB("MyConnectionName"))
    {
            Person d = new Person()
            {
                name = "mimi"
            };

            db.Insert(d);

            myLabel.Content = db.Drivers.First().name;
        }
    }

打开一个空数据库就OK了。实际上是为其创建了一个 0KB 文件。但是当我尝试向其中插入一些内容(或者当然读取一些内容)时,我会得到一个异常:

SQL logic error or missing database

我正在使用的库:

https://github.com/linq2db/linq2db

NuGet
套餐:

http://nuget.org/packages/linq2db.SQLite/

在开始写入空数据库文件之前我需要做些什么吗?

c# linq sqlite linq2db
3个回答
14
投票

Linq2DB 不会自动创建表。所以你必须检查表是否存在,如果不存在则创建它。你可以这样做:

    var sp = db.DataProvider.GetSchemaProvider();
    var dbSchema = sp.GetSchema(db);
    if(!dbSchema.Tables.Any(t => t.TableName == "Person"))
    {
       //no required table-create it
       db.CreateTable<Person>();
    }

不幸的是,缺少一些文档。但你可以使用测试sample


0
投票

为了扩展 Andrey Efimov 的答案,不是对架构实施您自己的查询以查看表是否存在并有条件地创建表,而是有一个内置属性仅在必要时创建表。

connection.CreateTable<MyEntity>(tableOptions: TableOptions.CheckExistence);

-2
投票

您没有打开数据库。

MyDB db = MyDB("MyConnectionName") <- Create Database.

db.open(); <- add this.

然后就可以正常操作了。

© www.soinside.com 2019 - 2024. All rights reserved.