Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq2db创建数据库_C#_Linq2db - Fatal编程技术网

C# 使用linq2db创建数据库

C# 使用linq2db创建数据库,c#,linq2db,C#,Linq2db,我正在写一个小程序来测试linq2db。我想做的是创建数据库,如果它还不存在的话。大多数(全部?)linq2db文档都假定存在一个数据库。我检查数据库是否存在,如果不存在,使用CreateCommand创建一个空数据库,如下所示。Intellisense对此表示,该方法“仅供内部使用”。使用CreateCommand可以吗?还是有更好的方法 namespace SqliteTest { public partial class ImageDatabaseDB : LinqToDB.Dat

我正在写一个小程序来测试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...
            }
        }

    }
namespace-SqliteTest
{
公共部分类ImageDatabaseDB:LinqToDB.Data.DataConnection
{
公共ITable测试表{get{返回this.GetTable();}
public void InitMappingSchema()
{
}
公共ImageDatabaseDB()
{
InitDataContext();
InitMappingSchema();
}
公共ImageDatabaseDB(字符串配置):基本(配置)
{
InitDataContext();
InitMappingSchema();
} 
部分无效InitDataContext();
}
[表(“测试表”)]
公共部分类测试表
{
[PrimaryKey,Identity]公共整数id;
[Column,NotNull]公共字符串名称;
[列,可空]公共字符串说明;
}
公共静态部分类表扩展
{
公共静态测试表查找(此ITable表,长id)
{
返回表.FirstOrDefault(t=>
t、 id==id);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
常量字符串dbLocation=@“\TestDatabase\TestDatabase.sqlite”;
如果(!File.Exists(dbLocation))
{
使用(var db=newtestdatabasedb())
{
db.CreateCommand();
//创建表。。。
}
}
}
Linq2db,不支持从实体映射创建DB架构(代码优先方法)

但是,Linq2db能够通过映射生成CREATE TABLE DDL语句。另请参见。

Linq2db,不支持从实体映射创建DB架构(代码优先方法)


但是,Linq2db能够通过映射生成CREATE TABLE DDL语句。另请参见。

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

为什么要使用
db.CreateCommand();
vs
var command=db.command;
?为什么要使用
db.CreateCommand()
vs
var command=db.command;
?好的,我现在了解到linq2db首先只支持db,因此将使用现有的数据库。但是,CreateCommand实际上创建了一个空的SQLite数据库,并允许我在其中创建表。从我删除db.CreateCommand(),数据库仍然会与其中的表一起创建。当然,您有机会通过执行原始SQL命令的代码从头开始创建数据库(IDataContext.CreateTable可帮助您完成此操作)。但您不应该弄乱CreateCommand或其他低级ADO.NET概念。最好使用Linq2db提供的来执行原始SQL。好的,我现在了解到Linq2db只支持DB,所以将首先使用现有数据库。但是,CreateCommand实际上创建了一个空的SQLite数据库,并允许我在其中创建表。它似乎CreateCommand实际上并没有创建空的SQLite数据库,因为当我删除db.CreateCommand()时,数据库仍然会与其中的表一起创建。当然,您有机会通过执行原始SQL命令的代码从头开始创建数据库(IDataContext.CreateTable可以帮助您)。但您不应该弄乱CreateCommand或其他低级ADO.NET概念。最好使用Linq2db提供的来执行原始SQL。