我在刷新数据库中的数据时遇到问题。请参阅下面的代码。我在这里尝试完成的是:我创建一个 ProductProtocol (p) 并将一个 ProductProtocolContent 添加到 ProductProtocolContents 列表中。然后我将所有内容保存到数据库中。之后,我模拟了我要撤消的更改(添加另一个 ProductProtocolContent ),并且我想在使用我的存储库刷新对象后进行测试
var p = new ProductProtocol { Name = "test1" };
p.ProtocolContents.Add(new ProductProtocolContent { ValidFrom = DateTime.Now, Value = "9_qwe2341" });
var r = RepositoryFactory.Create<ProductProtocol>(unitOfWork);
r.Add(p);
unitOfWork.Commit();
// add another ProductProtocolContent, p.ProductProtocolContents.Count == 2
p.ProtocolContents.Add(new ProductProtocolContent { ValidFrom = DateTime.Now, Value = "9_truf7461" });
// undo the changes to the object
r.Refresh(p);
// reload the ProductProtocolContents from the database
r.LoadPropertySet(p, pc => pc.ProtocolContents);
// p.ProductProtocolContents.Count should be 1
Assert.IsTrue(p.ProtocolContents.Count == 1);
我的问题是调用 Assert.IsTrue 时 p.ProtocolContents.Count == 0 。
r.LoadPropertySet() 的实现如下:
public void LoadPropertySet<Y>(T target, Expression<Func<T, ICollection<Y>>> spec) where Y : BaseBusinessObject
{
context.Entry(target).Collection(spec).CurrentValue.Clear();
context.Entry(target).Collection(spec).Load();
}
使用 Entity Framework 4(使用 ObjectContext 而不是 DbContext)我只是做了这个并且有效:
context.LoadProperty(target, spec, MergeOption.OverwriteChanges);
我将如何使用 DbSet 来执行此操作,我必须转换回 ObjectContext 还是有 DbSet 的等价物?