我正在使用Entity Framework 6,我有一个产品对象,其中包含如下变体列表:
public class Product
{
public int ProductId { get; set;}
public virtual ICollection<Variant> Variants { get; set;}
... other properties
}
public class Variant
{
public int VariantId { get; set;}
public int ProductId { get; set;}
public virtual Product Product { get; set;}
public int StoreId { get; set;}
... other properties
}
我用它来从上下文中获取产品:
public static GetProducts()
{
using (MyDBContext context = new MyDBContext())
{
return context.Products.Include(p => p.Variants);
}
}
现在一切正常,当我得到Product
时,它会回复变体。但是,今天早上我愚蠢地使用了上下文中的Product
而不是DTO,并根据StoreId
过滤了变体,现在每当我得到Product
时,它只返回变体该商店(即使我从未提交任何更改)。
我检查了数据库,所有变种仍然存在,所以如何重置我的上下文,以便我再次获得所有变种。
我尝试了以下内容:
使用以下方式重新加载产品:
foreach (Product product in context.Products) { context.Entry(product).Reload(); }
但似乎没有任何工作,我还需要做些什么来重置上下文吗?
答案 0 :(得分:0)
事实证明,它是变体实体的配置错误,而不是过滤后的上下文。我只使用VariantID
作为Key
,但由于存在多个具有相同ID的变体,因此它覆盖了以下变体,其值与第一个具有该ID的变量相同查询后回来的对象(看起来好像只有我过滤过的商店)。
我通过使密钥对商店和变体id唯一来解决这个问题:
HasKey(v => new {v.VariantId, c.StoreId});