我应该缓存传入的数据。我有 2 个模型 OrderModel 和 OrderDetailedModel,其中 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 类型。
发生这种情况是因为详细订单与列表中下载的订单之一具有相同的 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