【问题标题】:Creating a database with linq2db使用 linq2db 创建数据库
【发布时间】:2018-08-25 11:25:10
【问题描述】:

我正在编写一个小程序来测试 linq2db。如果数据库尚不存在,我想要做的是创建数据库。大多数(全部?) linq2db 文档都假定现有数据库。我检查数据库是否存在,如果不存在,则使用 CreateCommand 创建一个空数据库,如下所示。 Intellisense 表示此方法“仅供内部使用”。使用 CreateCommand 可以吗?还是有更好的方法?

namespace SqliteTest
{
    public partial class ImageDatabaseDB : LinqToDB.Data.DataConnection
    {
        public ITable<testTable> testTables { get { return this.GetTable<testTable>(); } }

        public void InitMappingSchema()
        {
        }
        public ImageDatabaseDB()
        {
            InitDataContext();
            InitMappingSchema();
        }
        public ImageDatabaseDB(string configuration) : base(configuration)
        {
            InitDataContext();
            InitMappingSchema();
        } 
        partial void InitDataContext();
    }
    [Table("testTable")]
    public partial class testTable
    {
        [PrimaryKey, Identity] public int id;
        [Column, NotNull] public string Name;
        [Column, Nullable] public string Description;
    }
    public static partial class TableExtensions
    {
        public static testTable Find(this ITable<testTable> table, long id)
        {
            return table.FirstOrDefault(t =>
                t.id == id);
        }
    }
class Program
{
    static void Main(string[] args)
    {
        const string dbLocation = @".\TestDatabase\TestDatabase.sqlite";
        if (!File.Exists(dbLocation))
        {
            using (var db = new TestDatabaseDB())
            {
                db.CreateCommand(); 
                // create tables...
            }
        }

    }

【问题讨论】:

标签: c# linq2db


【解决方案1】:

要创建 sqlite 数据库,您应该使用LinqToDB.DataProvider.SQLite.SQLiteTools.CreateDatabase(...) 方法

【讨论】:

    【解决方案2】:

    Linq2db offers Database First approach only,现成不支持从实体映射(代码优先方法)创建数据库架构。

    但是,Linq2db 能够从 IDataContext.CreateTable<T> 的映射生成 CREATE TABLE DDL 语句。另见this discussion

    【讨论】:

    • 好的,我现在明白 linq2db 只支持 DB,所以会使用现有的数据库。但是,CreateCommand 实际上创建了一个空的 SQLite 数据库,并允许我在其中创建表。
    • 看来 CreateCommand 实际上并没有创建一个空的 SQLite 数据库,因为当我删除 db.CreateCommand() 时,数据库仍然与其中的表一起创建。
    • 当然,您有机会通过执行原始 SQL 命令的代码从头开始创建数据库(IDataContext.CreateTable 可以帮助您)。但是您不应该混淆 CreateCommand 或其他低级 ADO.NET 概念。你最好使用 Linq2db 提供的the API 来执行原始 SQL。
    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2023-01-30
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多