我在刷新數據庫中的數據時遇到問題。請參閱下面的代碼。我在此嘗試完成的是:創建一個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);
我的問題之後是p.ProtocolContents.Count == 0在調用Assert.IsTrue時。
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();
}
使用實體框架4(使用的ObjectContext代替的DbContext)我只是做了這樣那樣的工作:
context.LoadProperty(target, spec, MergeOption.OverwriteChanges);
我將如何使用DbSet來做到這一點,我必須轉換回ObjectContext還是有DbSet的等價物?
我想是的,但在此之前,我想確保我不會忽略某些東西。 – 2013-03-12 12:09:00