簡體   English   中英

如何使用帶有復合鍵的SQLite-Net擴展

[英]How to use SQLite-Net Extensions with Composite keys

我有以下課程:

Class1.cs:

[JsonObject(MemberSerialization.OptIn)]
public class Class1
{
    [PrimaryKey]
    [JsonProperty("key1")]
    public string Key1 { get; set; }

    [PrimaryKey]
    [JsonProperty("key2")]
    public string Key2 { get; set; }

    [PrimaryKey]
    [JsonProperty("key3")]
    public string Key3 { get; set; }

    [JsonProperty("normalStuff")]
    public string NormalStuff{ get; set; }

    [OneToMany(CascadeOperations = CascadeOperation.All)]
    [JsonProperty("customObjectList")]
    public List<CustomObject> CustomObjects { get; set; }
}

然后是我的CustomObject類:

[JsonObject(MemberSerialization.OptIn)]
public class CustomObject
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    [ForeignKey(typeof(Class1))]
    public string Class1Key{ get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }

    [JsonProperty("value")]
    public string Value { get; set; }
}

基本上,我要完成的工作是有一個表,其中包含到這些自定義對象的映射。 SQLite-Net擴展是否甚至支持此功能? MVVMCross SQLite社區軟件包的最新版本支持組合鍵方面。 當我嘗試將上述數據結構保存到數據庫中時,它將保存除CustomObjects之外的所有內容……這些最終為null。 如果您需要更多信息以了解我要完成的工作,請告訴我!

首先,感謝您對MvvmCross SQLite社區插件的貢獻。

遺憾的是,當前SQLite-Net擴展中不支持復合鍵,只有MvvmCross SQLite-Net的實現支持多個主鍵,這是最近的更改。

我將研究支持它所需的更改,但這需要一些時間。 SQLite-Net擴展建立在以下假設之上:主鍵是唯一的,因此每個關系的外鍵也將是唯一的。 這種調整將需要對體系結構和API進行一些深刻的更改。

我在想這樣的事情,以避免更改當前正在使用的公共API:

[CompositeForeignKey(typeof(Class1), "key1", "key2", "key3"]
public Tuple<int, int, int> Class1Key { get; set; }

我在項目中創建了一個新問題來跟蹤狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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