엔터티 프레임 워크에서 내 개체를 재귀 적으로 분리하는 방법을 작성했습니다. 실제로 작동하지만 문제는이 메서드를 실행 한 후 일대 다 속성 (개체 컬렉션)이 제거된다는 것입니다. 내 코드 아래 :엔터티 프레임 워크에서 재귀 엔터티 분리
public void DetachRec(object objectToDetach)
{
DetachRec(objectToDetach, new HashSet<object>());
}
// context is my ObjectContext
private void DetachRec(object objectToDetach, HashSet<object> visitedObjects)
{
visitedObjects.Add(objectToDetach);
if (objectToDetach == null)
{
return;
}
Type type = objectToDetach.GetType();
PropertyInfo[] propertyInfos = type.GetProperties();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
// on to many
if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>))
{
if (context.Entry(objectToDetach).Collection(propertyInfo.Name).IsLoaded)
{
var propValue = (IEnumerable) propertyInfo.GetValue(objectToDetach, null);
if (propValue != null)
{
var subcontext = new List<object>();
foreach (var subObject in propValue)
{
subcontext.Add(subObject);
}
foreach (var subObject in subcontext)
{
if (!visitedObjects.Contains(subObject))
{
context.DetachRecursive(subObject, visitedObjects);
}
}
}
}
}
// (many to one)
else if (propertyInfo.PropertyType.Assembly == type.Assembly)
{
//the part to detach many-to-one objects
}
}
context.Detach(objectToDetach);
}
"컬렉션이 제거되었습니다"라고 말하면 그게 무슨 뜻입니까? 그 속성이 null을 반환한다는 것을 의미합니까? – JuanR
http://stackoverflow.com/a/7693732/430661을 읽고 적용되는지 확인하십시오. –
@Juan, 예, 속성은 null을 반환합니다. –