簡體   English   中英

SQLite.net 中的名稱表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM