데이터베이스에서 데이터를 새로 고치는 데 문제가 있습니다. 아래 코드를 참조하십시오. 여기서 내가 시도하고자하는 것은 ProductProtocol (p)을 만들고 ProductProtocolContent 목록에 하나의 ProductProtocolContent를 추가합니다. 그런 다음 전체 데이터베이스를 데이터베이스에 저장합니다. 그 후 나는 내가 할 (다른 ProductProtocolContent의 추가) 내가 취소하려면 그와 저장소 (repository)에 사용데이터베이스에서 강제로로드 탐색 속성
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();
}
는 단순히 이런 짓을 (대신 DbContext의 ObjectContext를 사용) 엔티티 프레임 워크 4를 사용하고 그 일 :
context.LoadProperty(target, spec, MergeOption.OverwriteChanges);
DbSet을 사용하여이 작업을 수행하려면 어떻게해야합니까? ObjectContext로 다시 변환해야합니까? 아니면 DbSet에 해당하는 것이 있습니까?
나는 그렇게 생각한다. 그러나 내가 그것을하기 전에 나는 내가 무엇인가 멀리 바라 보지 않도록하고 싶다. –