[英]Name table in SQLite-net
我正在構建一個 Windows 8 C#/XAML 應用程序,它使用 SQLite 作為存儲數據庫,並且我正在嘗試使用 SQLite.net 語法創建多個表。
根據我到目前為止的研究,一個表是基於 class 創建的。首先,我通過以下方式創建了一個“帳戶”class:
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().
我看不到在哪里輸入表本身的名稱。
如何創建多個表,即一個名為“BusinessAccounts”的表和另一個基於帳戶 class 的“PersonalAccounts”?
有沒有辦法用 SQLite.net 做到這一點? 或者我是否需要以某種方式顯式寫出 SQLite 命令?
這個答案似乎已經過時了,在SQLite-net中,您現在可以在類上使用屬性來更改表名,例如:
[SQLite.Table("table_customers")]
public class Customer
{
[MaxLength(3)]
public string code { get; set; }
[MaxLength(255)]
public string name { get; set; }
}
因此它將創建/更新該表。
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() {...});
請注意,上面的代碼未經測試。 您將要確保正確創建了表(例如,使用正確的主鍵和自動增量字段)。
只需添加 SQLite.net,您可以通過實現初始化重載並設置 SQLite.TableAttribute 來更改 class 的屬性,如下所示:
[Table("Account")]
public class Account
{
[PrimaryKey]
[AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public Account(string name = null)
{
if (!string.IsNullOrEmpty(name))
{
TableAttribute attrname = TypeDescriptor.GetAttributes(this)(0);
attrname.Name = name;
}
}
}
該名稱默認為帳戶,但如果您使用字符串初始化 class,它會設置該屬性,因此您可以使用該名稱創建一個表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.