1

我正在构建一个使用 SQLite 作为存储数据库的 Windows 8 C#/XAML 应用程序,并且我正在尝试使用 SQLite-net 语法创建多个表。

从我到目前为止的研究来看,一个表是基于一个类创建的。首先,我通过以下方式创建了一个“帐户”类:

public class Account
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public string Name { get; set; }
    public string Type { get; set;}
}

然后创建一个表并稍后在代码中通过以下方式输入初始数据:

    private static readonly string _dbPath =
        Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "data.sqlite");


        using (var db = new SQLite.SQLiteConnection(_dbPath))
        {
            db.CreateTable<Account>();

            db.RunInTransaction(() =>

               db.Insert(new Account()
                    {
                        Name = "MyCheckingAccount",
                        Type = "Checking",
                    })
                    );
        }

我想创建多个帐户表,但db.CreateTable<Account>()语法只是创建一个表,数据被插入到列中,db.Insert().我看不到在哪里输入表本身的名称。

如何基于 Account 类创建多个表,即一个名为“BusinessAccounts”的表和另一个名为“PersonalAccounts”的表?

有没有办法用 SQLite-net 做到这一点?或者我是否需要以某种方式明确地写出 SQLite 命令?

4

2 回答 2

7

这个答案似乎已经过时了,在 SQLite-net 中,您现在可以使用类上的属性来覆盖表名,例如:

[SQLite.Table("table_customers")]
public class Customer
    {
        [MaxLength(3)]
        public string code { get; set; }

        [MaxLength(255)]            
        public string name { get; set; }
    }

因此它将创建/更新该表。

于 2017-05-17T10:30:43.813 回答
2

Sqlite-Net 使用类名来创建表,以及更新数据。为了做你想做的事,你需要创建单独的类。绕过重复公共字段的一种方法是使用继承:

public class Account
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public string Name { get; set; }
    public string Type { get; set;}
}

public class BusinessAccounts : Account { }

public class PersonalAccounts : Account { }

创建表:

db.CreateTable<BusinessAccounts>();
db.CreateTable<PersonalAccounts>();

要插入数据:

db.Insert(new BusinessAccounts() {...});
db.Insert(new PersonalAccounts() {...});

请注意,上述代码未经测试。您需要确保正确创建表(例如,使用正确的主键和自动增量字段)。

于 2013-07-13T00:06:40.747 回答