Diese Frage könnte wie ein Duplikat zu anderen ähnlichen Fragen aussehen. Aber ich schlage dir vor, die Frage bis zum Ende zu lesen und dann zu entscheiden, ob es ein Duplikat von irgendeinem Beitrag ist oder nicht ?????Der Vorgang ist fehlgeschlagen: Die Beziehung konnte nicht geändert werden, da mindestens eine Eigenschaft des Fremdschlüssels nicht nullfähig ist.
Ich habe 6 Tabellen in meiner Datenbank wie folgt:
ich einige Datensätze haben bereits in allen Tabellen eingefügt.
Jetzt versuche ich eine Bestellung zu aktualisieren.
Zuerst habe ich versucht, einfach zu aktualisieren, wie folgt:
CurrentOrder.UpdateOrder(Order);
Die UpdateOrder Methode in OrderClient wie folgt aussieht:
public Order UpdateOrder(Order Order)
{
IOrderRepository OrderRepository = _DataRepositoryFactory.GetDataRepository<IOrderRepository>();
Order updatedEntity = null;
if (Order.OrderId == 0)
{
updatedEntity = OrderRepository.Add(Order);
}
else
{
updatedEntity = OrderRepository.Update(Order);
}
return updatedEntity;
}
Und in OrderRepository:
protected override Order UpdateEntity(RateDifferenceContext entityContext, Order entity)
{
return (from e in entityContext.OrderSet
where e.OrderId == entity.OrderId
select e).FirstOrDefault();
}
Und dann verwende ich in der Klasse DataRepositoryBase die folgende Methode:
public T Update(T entity)
{
using (U entityContext = new U())
{
T existingEntity = UpdateEntity(entityContext, entity);
SimpleMapper.PropertyMap(entity, existingEntity);
entityContext.SaveChanges();
return existingEntity;
}
}
An dieser Stelle habe ich eine Fehlermeldung,:
Multiplicity constraint violated. The role '…' of the relationship '…' has multiplicity 1 or 0..1
So, dachte ich, dass ich die Aufzeichnungen löschen muß, die in allen verknüpften Tabellen zu dieser Reihenfolge spezifisch sind. Also versuchte ich den Code unten:
using (var xaction = new TransactionScope())
{
foreach (OrderItemDetail orderItemDetail in OrderItemDetailClient.GetAllOrderItemDetails().Where(x => x.OrderId == NewOrder.OrderId))
{
OrderItemDetailClient.DeleteOrderItemDetail(orderItemDetail);
}
foreach (Dispatch dispatch in DispatchClient.GetAllDispatches().Where(x => x.OrderId == NewOrder.OrderId))
{
foreach (DispatchItemDetail dispatchItemDetail in DispatchItemDetailClient.GetAllDispatchItemDetails().Where(x => x.InvoiceId == dispatch.InvoiceId))
{
DispatchItemDetailClient.DeleteDispatchItemDetail(dispatchItemDetail);
}
DispatchClient.DeleteDispatch(dispatch);
}
OrderClient.UpdateOrder(NewOrder);
xaction.Complete();
}
Nun bekomme ich eine andere Fehlermeldung, dass:
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
ich diesen Fehler auf unten genannten Zeile in der letzten Codeblock:
DispatchClient.DeleteDispatch(dispatch);
Vielen Dank für eine großartige Erklärung. Ich habe meine Antwort. – Vishal