ich mit EF während der Aktualisierung folgende Fehlermeldung erhalten:Die Beziehung kann nicht geändert werden, da ein oder mehrere der Fremdschlüsseleigenschaften sind nicht auf NULL festlegbare
Der Vorgang ist fehlgeschlagen: Die Beziehung nicht, weil man verändert werden könnte oder Weitere Fremdschlüsseleigenschaften sind nicht nullfähig. Wenn eine Änderung an einer Beziehung vorgenommen wird, wird die zugehörige Fremdschlüsseleigenschaft auf einen Nullwert festgelegt. Wenn der Fremdschlüssel keine Nullwerte unterstützt, muss eine neue Beziehung definiert werden, der Fremdschlüsseleigenschaft muss ein anderer Wert ungleich Null zugewiesen werden, oder das nicht verwandte Objekt muss gelöscht werden.
Gibt es eine allgemeine Art und Weise, welche Fremdschlüssel-Eigenschaften über Fehler verursachen zu finden?
[Update]
Für einen Fall folgenden Code Ursache über Fehler (arbeitete ich in einer getrennten Umgebung, so habe ich graphdiff
meiner Objekte Graph zu aktualisieren), wenn es will _uow.Commit();
auszuführen:
public void CopyTechnicalInfos(int sourceOrderItemId, List<int> targetOrderItemIds)
{
_uow = new MyDbContext();
var sourceOrderItem = _uow.OrderItems
.Include(x => x.NominalBoms)
.Include("NominalRoutings.NominalSizeTests")
.AsNoTracking()
.FirstOrDefault(x => x.Id == sourceOrderItemId);
var criteria = PredicateBuilder.False<OrderItem>();
foreach (var targetOrderItemId in orderItemIds)
{
int id = targetOrderItemId;
criteria = criteria.OR(x => x.Id == id);
}
var targetOrderItems = _uow.OrderItems
.AsNoTracking()
.AsExpandable()
.Where(criteria)
.ToList();
foreach (var targetOrderItem in targetOrderItems)
{
//delete old datas and insert new datas
targetOrderItem.NominalBoms = sourceOrderItem.NominalBoms;
targetOrderItem.NominalBoms.ForEach(x => x.Id = 0);
targetOrderItem.NominalRoutings = sourceOrderItem.NominalRoutings;
targetOrderItem.NominalRoutings.ForEach(x => x.Id = 0);
targetOrderItem.NominalRoutings
.ForEach(x => x.NominalTests.ForEach(y => y.Id = 0));
targetOrderItem.NominalRoutings
.ForEach(x => x.NominalSizeTests.ForEach(y => y.Id = 0));
_uow.OrderItems.UpdateGraph(targetOrderItem,
x => x.OwnedCollection(y => y.NominalBoms)
.OwnedCollection(y => y.NominalRoutings,
with => with
.OwnedCollection(t => t.NominalTests)));
}
_uow.Commit();
}
Können Sie Ihren Code nicht eingrenzen und hier posten? Ich (wie auch einige andere) habe diese Art von Ausnahme noch nie erlebt, daher brauchen wir mehr Kontext, um das Problem zu diagnostizieren. – Hopeless
@Hopeless: Ich meine generell, wie kann ich Fremdschlüsseleigenschaften finden, die den Fehler verursacht. aber wenn nötig, kann ich meinen Code auch posten. – Masoud