有没有办法根据类定义在SQLite中动态生成表

本文关键字:SQLite 动态 定义 有没有 | 更新日期: 2023-09-27 18:31:34

我正在使用c#和System.Data.SQLite我有一些类想在运行时在 SQLite 中生成为表,但我不想为每个类硬编码 SQL 字符串。我想知道,最好的方法是什么?我尝试向我的类和类属性添加属性,希望有一些东西可以为我创建 SQL 字符串,但是......下面是一个示例:

  [Table(Name = "tblDocument")]
  public class Document
  {
    [Column(IsPrimaryKey = true, IsDbGenerated = true)]
    public long DocumentId { get; set; }
    [Column(CanBeNull = true)]
    public string File { get; set; }
  }

要在SQLite中将其创建为表,我需要生成类似以下内容的内容:

  string CreateSqlString =
    @"CREATE TABLE [tblDocument] (" +
    @"[DocumentId] INTEGER  PRIMARY KEY NOT NULL," +
    @"[File] TEXT  NOT NULL)";

提前谢谢。

有没有办法根据类定义在SQLite中动态生成表

您是否正在寻找类似 SubSonic 的东西。它可以在启用迁移的情况下运行,这将为您的类生成表。

假设您引用了 Castle.Core.dll、SubSonic.Core.dll 和 System.Data.SQLite.DLL

class Program
{
    private const string ConnectionString = @"Data Source=c:'subsonic.db";
    private const string ProviderString = @"System.Data.SQLite";
    private static IDataProvider provider = ProviderFactory.GetProvider(ConnectionString, ProviderString);
    private static SimpleRepository repo = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations);
    static void Main(string[] args)
    {
        var demo = new Demo { Name = "Test Demo", LaunchDate = DateTime.Now };
        repo.Add(demo);
    }
    class Demo
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public DateTime LaunchDate { get; set; }
    }
}

应用程序配置应该是

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.data>
        <DbProviderFactories>
            <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
        </DbProviderFactories>
    </system.data>
</configuration>