2013-03-12 61 views
2

我在刷新數據庫中的數據時遇到問題。請參閱下面的代碼。我在此嘗試完成的是:創建一個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的等價物?

回答

1

如果你不能在DBContext上完成它,你總是可以投射到ObjectContext並使用它的功能。

MSDN:DbContext通過使用簡化和更直觀的API封裝了ObjectContext並公開了ObjectContext最常用的功能。無論何時需要使用DbContext不支持的功能,都可以訪問底層的ObjectContext。

+0

我想是的,但在此之前,我想確保我不會忽略某些東西。 – 2013-03-12 12:09:00