Ich habe 1 zu viele Beziehung mit in meiner Datenbank Ich versuche, alle th Objekte in der Sammlung mit einer generischen Methode zu aktualisieren.Multiplikationsbedingung verletzt. Die Rolle '<T>' der Beziehung hat Multiplizität 1 oder 0..1
public static void DuplicateItem<T>(T dataBaseItem, T origionalItem)
{
var type = origionalItem.GetType();
var properties = type.GetProperties();
var databasePropertyInfo = dataBaseItem.GetType();
foreach (var origionalProperty in properties)
{
var n = origionalProperty.Name;
var databaseProperty = databasePropertyInfo.GetProperty(origionalProperty.Name);
if(IsComplex(origionalProperty.GetValue(origionalItem,null)))
continue;
var origionalValue = origionalProperty.GetValue(origionalItem, null);
var t = Nullable.GetUnderlyingType(origionalProperty.PropertyType)
?? origionalProperty.PropertyType;
var saveValue = (origionalValue == null) ? null : Convert.ChangeType(origionalValue, t);
databaseProperty.SetValue(dataBaseItem, saveValue);
}
}
Diese Methode funktioniert gut, außer auf Sammlungen. es wird einfach nur die Artikel von originalItem.Collection
zu databaseItem.Colletion
hinzufügen, was dazu führt, dass ich doppelt so viele Artikel habe, wie ich sollte, was mich durch diese Ausnahme macht. Was ich will, ist nur alle Kinder von databaseItem.Collection
bis origanalItem.Collection
zu aktualisieren. So
Ich habe versucht, eine Änderung vorzunehmen:
public static void DuplicateItem<T>(T dataBaseItem, T origionalItem)
{
var type = origionalItem.GetType();
var properties = type.GetProperties();
var databasePropertyInfo = dataBaseItem.GetType();
foreach (var origionalProperty in properties)
{
var n = origionalProperty.Name;
var databaseProperty = databasePropertyInfo.GetProperty(origionalProperty.Name);
if(IsComplex(origionalProperty.GetValue(origionalItem,null)))
continue;
if (IsCollection(origionalProperty.GetValue(origionalItem, null)))
{
ClearItems(databaseProperty.GetValue(dataBaseItem,null),
origionalProperty.GetValue(origionalItem, null));
}
var origionalValue = origionalProperty.GetValue(origionalItem, null);
var t = Nullable.GetUnderlyingType(origionalProperty.PropertyType)
?? origionalProperty.PropertyType;
var saveValue = (origionalValue == null) ? null : Convert.ChangeType(origionalValue, t);
databaseProperty.SetValue(dataBaseItem, saveValue);
}
}
und Clear:
private static void ClearItems(object databaseValue, object newvalue)
{
var l = databaseValue as IEnumerable<object>;
var n = newvalue as IEnumerable<object>;
if (l != null)
{
for (int i = 0; i < l.Count(); i++)
{
var dItem = l.ToList()[i];
var nItem = n.ToList()[i];
DuplicateItem(dItem,nItem);
}
}
}
Das jetzt gibt mir nur 3 Stück, aber ich bin zu werfen immer noch die Ausnahme. So jetzt meine Frage: Wie kann ich ClearItems<TDatabase,TOriganial>
verwenden, um alle Elemente in der Sammlung und alle Eigenschaften in der Sammlung zu aktualisieren?
Vielen Dank.