mam jakiś błąd: EF 4: Removing child object from collection does not delete it - why?EF 4.1: Usunięcie obiektu podrzędnego z kolekcji nie powoduje jego usunięcia - dlaczego?
kiedy wyjąć dziecko z rodzicem, że dziecko jest usunięty, gdy zgłoszę SaveChanges()
, daje komunikat o błędzie następująco:
Operacja nie powiodło się: związku nie można zmienić, ponieważ jedna lub więcej właściwości klucza obcego jest nie-nullable. Gdy wprowadzana jest zmiana relacji, powiązana właściwość klucza obcego jest ustawiona na wartość pustą. Jeśli klucz obcy nie obsługuje wartości pustych, musi zostać zdefiniowana nowa relacja, właściwość klucza obcego musi mieć przypisaną inną wartość inną niż null lub obiekt niepowiązany musi zostać usunięty.
Ale z DbContext i EF 4.1, "context.DeleteObject (przepis)" nie istnieje.
Jakieś sugestie?
[EDIT]
public void UpdateWithAttributes(Model model, IEnumerable<Entity> entities)
{
var modelOriginal = this.unitOfWork.Model.GetById(model.IModel);
this.unitOfWork.Context.Entry(modelOriginal).CurrentValues.SetValues(model);
UpdateEntityAttributeAssociations(modelOriginal, entities);
this.unitOfWork.Commit();
}
public void UpdateEntityAttributeAssociations(Model model, IEnumerable<Entity> current)
{
unitOfWork.Context.Entry(model).Collection(m => m.Entities).Load();
ICollection<Entity> original = model.Entities; // perhaps .ToList() necessary
// delete
if (original != null)
{
List<Entity> toDelete = GetToDelete(original, current);
foreach (Entity originalEntityToDelete in toDelete)
{
unitOfWork.Context.Entity.Remove(originalEntityToDelete);
}
}
// add, update
if (current != null)
{
foreach (Entity currentEntity in current)
{
// No need to set the UpdatedWhen. The trigger on the table will handle that.
if (original.Where(originalEntity => originalEntity.IEntity == currentEntity.IEntity).FirstOrDefault() == null)
{
model.Entities.Add(currentEntity);
}
}
}
}
Dziękuję Slauma za odpowiedź .Z twoim kodem mam kolejny błąd: Instrukcja DELETE jest w konflikcie z ograniczeniem REFERENCE {0} Konflikt wystąpił w bazie danych \ "MyDatabase \", tabela \ "{1} \", kolumna „{2}” \ r stwierdzenie \ nIm zostało zakończone – rad
@rad:.. nie mam pojęcia, należy edytować odpowiedzi na moje ostatnie pytania powyżej do Twojego pytania..Jest zbyt wiele brakujących informacji, aby szczegółowo zrozumieć problem i zapewnić działające rozwiązanie (przynajmniej dla mnie). – Slauma
@rad: Myślę, że istnieje inny byt, który odnosi się do istoty, którą właśnie próbujesz usunąć. Sekretna zawartość '{0}', '{1}' i '{2}' powinna dać raczej ważną wskazówkę! – Slauma