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