受信データをキャッシュすることになっています。OrderModel と OrderDetailedModel の 2 つのモデルがあります。OrderModel は基本クラスで、OrderDetailedModel は子クラスです。
ユーザーは最初に注文のリストを開きます - 一部のデータのみが取得されます (注文モデルのリスト)。このリストはキャッシュする必要があります。
ユーザーが特定の注文を選択すると、すべての情報が (OrderDetailedModel) になり、これもキャッシュする必要があります。
重要なことは、リストが再度ダウンロードされたときに、キャッシュされた OrderDetailedModel 行が OrderModel によって上書きされないようにすることです。(詳細情報をクリアしたくない)
2 つの異なる DbSet を作成しようとしました。
public DbSet<OrderModel> Orders { get; set; }
public DbSet<OrderDetailedModel> OrderDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<OrderDetailedModel>().Map(m =>
{
//m.MapInheritedProperties(); // this doesn't help either
m.ToTable("OrderDetails");
});
modelBuilder.Entity<OrderModel>().Map(m =>
{
//m.MapInheritedProperties();
m.ToTable("Orders");
});
}
しかし、彼らはまだ何らかの形で接続されているようです。これは、各 DbSet の「コンテンツ」です。
注文:
FROM [Orders] AS [Extent1]
LEFT OUTER JOIN (SELECT
[Extent2].[Id] AS [Id],
.....
cast(1 as bit) AS [C1]
FROM [OrderDetails] AS [Extent2] ) AS [Project1] ON [Extent1].[Id] = [Project1].[Id]}
注文詳細:
{SELECT
N'0X0X' AS [C1],
[Extent1].[Id] AS [Id],
...
[Extent1].[StoreContact] AS [StoreContact],
...
FROM [OrderDetails] AS [Extent1]
INNER JOIN [Orders] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]}
これにより、エラーが発生します。
var a = Entry<T>(detailedOrderObject);
「System.InvalidOperationException: OrderDetailedModel 型のエンティティが要求されたときに、見つかったエンティティは OrderModel 型でした。
これは、詳細な注文が、リストにダウンロードされた注文の 1 つと同じ ID 広告を持っているために発生します。(ID はサーバーから取得されます)
ここに行く正しい方法はどれですか?
- 2 つの完全に独立した独立したテーブル。これを行う方法?
- すべてを詳細な順序表に入れます。繰り返しますが、上で述べた上書きを避けるためにこれを行う方法は?
- 多分何か他のもの?
編集
モデルのクラス:
public class OrderModel
{
[Key, Column(Order=0), DatabaseGenerated(DatabaseGeneratedOption.None)]
[JsonProperty(PropertyName = "order_id")]
public int Id { get; set; }
[JsonProperty(PropertyName = "order_number")]
public String Number { get; set; }
//... only properties, like the one above
public class OrderDetailedModel :OrderModel
{
[JsonProperty(PropertyName="store_contact")]
public string StoreContact { get; set; }
//... only properties, like the one above