Entfernen Sie ein Element aus der Sammlung mit Entity Framework

Ich bin mit DDD. Ich habe ein Klasse Produkt, welches ein Aggregat root.

public class Product : IAggregateRoot
{
    public virtual ICollection<Comment> Comments { get; set; }

    public void AddComment(Comment comment)
    {
        Comments.Add(comment);
    }

    public void DeleteComment(Comment comment)
    {
        Comments.Remove(comment);
    }
}

Die Schicht hält, die die Modelle gar nicht kennt, EF überhaupt. Das problem ist, dass wenn ich Anrufe DeleteComment(comment) EF wirft Ausnahme

Einer Beziehung von der "Product_Comments' AssociationSet wird in der "Gelöscht" Status. Angesichts Vielzahl von Einschränkungen, eine entsprechende 'Product_Comments_Target' muss auch in den "Gelöschten" Zustand.

Selbst wenn das element aus der Auflistung entfernt, EF nicht löschen. Was sollte ich tun, um dies zu beheben, ohne zu brechen DDD? (Ich bin denken auch daran, ein repository für die Kommentare als gut, aber nicht rechts)

- Code Beispiel:

Weil ich bin versucht, DDD, die Product ist ein aggregate root, und es hat ein repository IProductRepository. Kann kein Kommentar vorhanden ist, ohne Produkt, daher ist eine Kinder Product Aggregat, und Product ist verantwortlich für die Erstellung und das löschen von Kommentaren. Comment nicht über ein Repository.

public class ProductService
{
    public void AddComment(Guid productId, string comment)
    {
        Product product = _productsRepository.First(p => p.Id == productId);
        product.AddComment(new Comment(comment));
    }

    public void RemoveComment(Guid productId, Guid commentId)
    {
        Product product = _productsRepository.First(p => p.Id == productId);
        Comment comment = product.Comments.First(p => p.Id == commentId);
        product.DeleteComment(comment);


        //Here i get the error. I am deleting the comment from Product Comments Collection,
        //but the comment does not have the 'Deleted' state for Entity Framework to delete it

        //However, i can't change the state of the Comment object to 'Deleted' because
        //the Domain Layer does not have any references to Entity Framework (and it shouldn't)

        _uow.Commit(); //UnitOfWork commit method

    }
}
  • Scheint, dass Sie nicht aufrufen EF-s SaveChanges
  • Ich denke, es gibt eine Tabelle namens Ziel. Diese Tabelle hat FK Verweis auf Kommentare Tabelle. Wenn Sie versuchen, eine Zeile zu löschen in der Kommentar-Tabelle, die Mitarbeiterin Zeilen in Ziel müssen zuerst gelöscht werden.
  • Ich bekomme diese Fehlermeldung, wenn ich rufen Sie SubmitChanges()
  • Nein, ich habe keine Tabelle, ich denke, das ist eine Standard-Beziehung-name erstellt von Entity Framework. (Ich bin mit Code First)
  • Können Sie erklären, mehr code?
  • BTw, du bist nicht mit DDD (zumindest die Frage hat keinen Bezug zu DDD), bist du mit EF. Bitte nicht Modell Ihrer Domäne auf der Oberseite des EF oder je nach EF oder anderen ORM oder Persistenz detail
  • Ich fügte hinzu, ein anderes Beispiel, ich hoffe, es ist nützlich.
  • Domain-Schicht weiß nichts von Entity Framework. Domain-Layer funktioniert einfach mit Repositories und UnitOfWork.
  • Können Sie auch zeigen Sie uns Ihre Zuordnung? Ich kann deinen Fehler reproduzieren.

InformationsquelleAutor Catalin | 2012-11-20
Schreibe einen Kommentar