Mein Domänenmodell liefert z.B. folgendes Objekt Report : IEntity<Report>
. Ich erhalte normalerweise Oracle-Formularobjekt-Objekt (oder Sammlungsarten) Formular gespeicherte Prozeduren. Für alle Typen werden C# -Klassen vom ODP.NET Visual Studio Custom Class-Assistenten generiert. So haben folgende I Klasse z.B .:Wie integriere ich ODP.NET in Repository-Klassen?
public class UDT_REPORT : INullable, IOracleCustomType, IXmlSerializable {
private bool m_IsNull;
private decimal m_REPORT_ID;
private decimal m_VALUE;
// etc
}
Derzeit Ich versuche, eine neue Datenzugriffsschicht für eine C# .NET-Anwendung zu erstellen. Ich möchte in diesem Fall das Repository-Muster anwenden, um eine lose Kopplung und bessere Testbarkeit zu erreichen. Aber wie integriert man diese generierten Klassen in Repositories? Wie gestaltet man die Klasse ReportRepository
?
public interface IReportRepository
{
Report Find(ReportId id);
IList<Report> FindAll();
void Store(Report Report);
}
Sollte ich folgenden Ansatz verwenden? Eine statische DB-Proxy-Klasse, die z. stellt eine generische Read<T>()
-Methode mit einem bestimmten Delegaten für Datenabruf und -zuordnung bereit. Und eine Fabrik zum Erstellen des DB-Providers.
Und folgende Delegate wird zum Abrufen des verwandten UDT-Objekts und Zuordnung zu dem Domänenobjekt, z. Report
.
private static Func<IDataReader, Customer> Fetch = reader =>
{
UDT_REPORT report = reader.GetValue(reader.GetOrdinal("out_param_report"));
Report report = Mapping.Map(reportEntity);
return report;
};
Was halten Sie von diesem Ansatz? Gibt es bessere Ansätze für die Integration von ODP.NET-Typen in Repositories? Oder sollte ich generierte UDT-Klassen vermeiden und stattdessen einen ORM-Frame hinzufügen?
Vielen Dank, dass Sie mir einen Einblick in Ihre Implementierung des Datenzugriffs gegeben haben. Momentan verwende ich keine EF. Meine Entity-Klassen sind C# -Klassen, die von den Oracle Developer Tools für Visual Studio (dem Custom Class Wizard) generiert werden. Ich muss mich auf gespeicherte Prozeduren als Schnittstelle (Sicherheitsrichtlinie) verlassen. Stored Procedures und EF können mit Referenzen als Ausgabeparameter arbeiten. Die Felder des Cursors können Entitäten zugeordnet werden. Es gibt keine Möglichkeit, Oracle UDT-Objekte EF-Entitäten zuzuordnen. –
Ich werde versuchen, einige Fakten über die aktuelle Situation aufzuhellen: - Gespeicherte Prozeduren sind erforderlich (keine parametrisierte/dynamische SQL). - Die meisten Prozeduren geben Objekte zurück ([Oracle UDT-Objekte] [1]) - Von Oracle Visual Studio Tools generierte C# -Klassen werden als Entitätsklassen verwendet. - Zur Zeit wird kein ORM verwendet (kein EF/no-Nhibernate). [1] http://docs.oracle.com/html/E10927_01/featUDTs.htm Und ich möchte das Design des Datenzugriffscodes verbessern. –