Ich habe eine halb komplizierte Frage in Bezug auf Entity Framework4, Lambda-Ausdrücke und Datentransferobjekte (DTO).EF4, Lambda, Repository-Muster und DTOs
Also habe ich ein kleines EF4-Projekt, und nach etablierten OO-Prinzipien, ich habe ein DTO, um eine Abstraktionsschicht zwischen den Datenkonsumenten (GUI) und dem Datenmodell bereitzustellen.
- VideoDTO = DTO mit Getter/Setter verwendet, von der GUI
- VideoEntity = Entity erzeugt durch EF4
Meine Frage dreht sich um die Verwendung des DTO durch die GUI (und nicht der mit GUI verwendet die Entity überhaupt, kombiniert mit der Notwendigkeit, ein Lambda an die Datenschicht zu übergeben. Meine Datenschicht ist ein Grundlagemuster mit Hinzufügen. Ändern, zu Löschen, Get, GetList etc. Der Versuch, eine Methode Suchen mit einer Unterschrift zu implementieren, wie so:
public IEnumerable<VideoDTO> Find(Expression<Func<VideoEntity, bool>> exp)
...
_dataModel.Videos.Where(exp).ToList<Video>()
---
Mein Problem/Anliegen ist die „exp“, um vom Typ VideoEntity sein statt VideoDTO. Ich möchte die Trennung von Bedenken beibehalten, damit die GUI über die Entity-Objekte nicht informiert wird. Aber wenn ich versuche, in
zu übergeben, kann ich nicht dann eine LINQ wo auf diesem Ausdruck mit dem tatsächlichen Datenmodell.
Gibt es eine Möglichkeit, ein Func<VideoDTO,bool>
zu einem Func<VideoEntity, bool>
Idealerweise würde meine Methode zu konvertieren Unterschrift Func<VideoDTO, bool>
akzeptieren und auf diese Weise die GUI würde keinen Hinweis auf die zugrunde liegende Dateneinheit hat.
Ist das klar genug? Danke für Ihre Hilfe
Danke für die Replies von euch beiden.
Ich werde versuchen, die Suchkriterien in einem Objekt zu definieren und diese im LINQ-Ausdruck zu verwenden. Beginnen Sie mit EF4 und L2S und nutzen Sie dies als Lernprojekt.
Danke nochmal!