我應該緩存傳入的數據。我有2個模型OrderModel和OrderDetailedModel,其中OrderModel是一個基類,OrderDetailedModel是一個子類。2個不同的獨立表中的基類和子類模型
用戶首先打開一個訂單列表 - 只有一些數據正在被檢索(訂購型號列表)。該列表應該被緩存。
當用戶選擇一個特定的訂單時,所有的信息都是(OrderDetailedModel),這也應該被緩存。
重要的是,我不希望緩存的OrderDetailedModel行被OrderModel在列表再次下載時覆蓋。 (不想清晰的細節信息)
我試圖創建2個不同的DbSets:
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: The entity found was of type OrderModel when an entity of type OrderDetailedModel was requested.
出現這種情況因爲詳細的訂單具有相同的ID廣告下載列表中的一個訂單。 (Ids來自服務器)
這是正確的方法嗎?
- 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
您可以發佈訂單和OrderDetails的代碼嗎? – IronMan84
@ IronMan84當然。雖然我擔心他們中沒有什麼有趣的。請參閱編輯。 – gisek