我正在编写一个小程序来测试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...
}
}
}
答案 0 :(得分:2)
要创建sqlite数据库,您应该使用LinqToDB.DataProvider.SQLite.SQLiteTools.CreateDatabase(...)
方法
答案 1 :(得分:0)
Linq2db offers Database First approach only,不支持立即从实体映射创建数据库模式(代码优先方法)。
但是,Linq2db能够通过IDataContext.CreateTable<T>从映射生成CREATE TABLE DDL语句。另请参见this discussion。