ich request
von db von Id erhalten: Request originalRequest = RequestRepository.GetById(id);
Löschen Objekt von Einheit mit Beziehung Eins-zu-viele
Dann von I erhalten die Nutzer-IDs Anfrage Kommentare:
var origRecipientsIds = originalRequest.Comments.Select(c => c.User.Id).ToList();
und von Eingabemodell I erhalten neue Benutzer (ids)
var editedRecipientsIds = model.Recipients.ToList();
und entfernen Sie dann Kommentare von User Ids:
var recipientsIdToRemove = origRecipientsIds.Where(x => !editedRecipientsIds.Contains(x));
var recipientsToRemove = GetRecipientsToRemove(originalRequest, recipientsIdToRemove);
recipientsToRemove.ToList().ForEach(x => originalRequest.Comments.Remove(x));
GetRecipientsToRemove
Methode gibt Sammlung von RequestComment
‚s
private IEnumerable<RequestComment> GetRecipientsToRemove(Request originalRequest,
IEnumerable<int> recipientsIdsToRemove)
{
var recipientsToRemove = new List<RequestComment>();
foreach (var id in recipientsIdsToRemove)
{
int localId = id;
var origComment = originalRequest.Comments.FirstOrDefault(x => x.User.Id == localId);
if (!recipientsToRemove.Contains(origComment))
{
recipientsToRemove.Add(origComment);
}
}
return recipientsToRemove;
}
Nachdem alle, dass ich SaveChanges
Methode
RequestRepository.Context.Entry(originalRequest).State = EntityState.Modified;
RequestRepository.SaveChanges();
nennen und erhalten Fehler
Die Beziehung nicht da geändert werden Eine oder mehrere 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.
Entity RequestComment
hat Nicht-Nullable FK Request
public class RequestComment : IIdent
{
[ForeignKey("Request")]
public int RequestId { get; set; }
...
}
Ich habe versucht, wieder zu bekommen requestComment
von db, markieren Sie ihn als Deleted
und Save
, aber das hilft nicht.
var dbComment = RequestCommentRepository.FindFirstOrDefault(x => x.User.Id == localId
&& x.RequestId == originalRequest.Id);
RequestCommentRepository.Context.Entry(dbComment).State = EntityState.Deleted;
RequestCommentRepository.SaveChanges();
Ändern 'public int RequestId {get; einstellen; } 'zu' public int? RequestId {erhalten; einstellen; } '. Setzen Sie das Löschverhalten auf 'Cascade', damit die EF die zugehörigen Einträge in den anderen Tabellen löscht. – aff
@flechilla, danke für deinen Kommentar. Aber gibt es eine andere Lösung, die keine Veränderung der Entität erfordert? – demo
Haben Sie versucht, das Löschverhalten im Kontext zu Cascade zu ändern? EF sollte sich darum kümmern. Wenn nicht, sollten Sie zuerst die zugehörigen Zeilen löschen, die Sie in den anderen Tabellen löschen. – aff