[英]How to iterate throught multiple releated tables with SQLite-Net Extensions?
[英]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.