簡體   English   中英

SQLite-Net擴展中的多個(相關)類類型的數組

[英]Arrays of multiple (related) class types in SQLite-Net Extensions

有沒有辦法從SQLite.Net Extensions中的同一父類繼承不同類類型的集合? 理想情況下,我希望有一個符合接口或抽象類的對象數組,但是我什至無法使標准類的子類型起作用。

public class ActivityCategory
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Icon { get; set; }
    public bool Recommended { get; set; }

    [OneToMany(CascadeOperations = CascadeOperation.All)]
    public SomeAbstractClass[] multipleTypesAllowed { get; set; }
}

public abstract class SomeAbstractClass
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    public string SomeValue { get; set; }

    [ForeignKey(typeof(ActivityCategory))]
    public int ActivityCategoryId { get; set; }

    [ManyToOne(CascadeOperations = CascadeOperation.All)]
    public ActivityCategory Category { get; set; }
}

我不能得到上述返回multiplesTypeAllowed的空數組以外的任何東西。 如果我不使父類不抽象並實例化它,則該方法有效,但即使該子類也不起作用。 有什么方法可以使繼承與SQLite.Net一起使用?

干杯。

當使用GetWithChildren獲取ActivityCategory對象時,內部sqlite-net使用反射來為每個子級調用new ActivateCategory()然后調用new SomeAbstractClass() 這就是為什么sqlite-net庫中的所有泛型都具有where T : new()約束的原因。 這就是類為抽象類時得到空數組的原因。 它只是無法通過庫實例化。 如果要將不同類型的實例存儲在同一數組中,則無法為sqlite-net猜測每次應使用哪種類型。 我當然不知道您的應用程序的邏輯,但是我認為您不能避免手動編寫查詢-不使用sqlite-net擴展。 例如,如果您的基本類是Vehicle,而Car&Truck是派生類,則可以使用:

    db.CreateTable<Vehicle>();
    Car c = new Car();
    Truck t = new Truck();
    db.Insert(c, typeof(Vehicle));
    db.Insert(t, typeof(Vehicle));
    ...
    List<Car> cars = db.Query<Car>("select * from Vehicle where VehicleType = ?", VehicleTypes.Car);
    List<Truck> trucks = db.Query<Truck>("select * from Vehicle where VehicleType = ?", VehicleTypes.Truck);

然后,您可以將兩個列表組合到一個Vehicle列表中,並將此列表添加到父實例(示例中為ActivityCategory)。

暫無
暫無

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

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