我的域模型提供了例如以下对象Report : IEntity<Report>.我通常检索Oracle用户定义的类型对象(或集合类型)表单存储过程.对于所有类型,C#类由ODP.NET Visual Studio自定义类向导生成.所以我有以下课程,例如:
public class UDT_REPORT : INullable, IOracleCustomType, IXmlSerializable {
private bool m_IsNull;
private decimal m_REPORT_ID;
private decimal m_VALUE;
// etc
}
Run Code Online (Sandbox Code Playgroud)
目前我正在尝试为C#应用程序创建一个新的数据访问层.我想在这种情况下应用存储库模式,以实现松耦合和更好的可测试性.但是如何将这些生成的类集成到存储库中?如何设计ReportRepository课程?
public interface IReportRepository
{
Report Find(ReportId id);
IList<Report> FindAll();
void Store(Report Report);
}
Run Code Online (Sandbox Code Playgroud)
我应该使用以下方法吗?静态数据库代理类,例如Read<T>(),使用给定委托公开泛型方法以进行数据检索和映射.以及用于创建数据库提供程序的工厂.
public static T Read<T>(string sql, Func<IDataReader, T> fetch, object[] parms = null)
{
using (var connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (var command = factory.CreateCommand())
{
// Add connection; sql command text; …Run Code Online (Sandbox Code Playgroud) 有没有办法将 Dapper 与存储过程返回的 Oracle 用户定义类型一起使用?Dapper 似乎适用于存储过程(请参阅将 Dapper 与返回游标的 Oracle 存储过程一起使用)。
var p = new OracleDynamicParameters();
p.Add("param_list", null, OracleDbType.Object, ParameterDirection.Output);
p.Add("param_reco", null, OracleDbType.Object, ParameterDirection.Output);
Run Code Online (Sandbox Code Playgroud)
在我的示例中,我添加了一个 UDT 集合对象作为输出参数 ( param_list)。我正在使用Dapper – Micro ORM for Oracle 和 Microsoft .NET 中OracleDynamicParameters发布的自定义。
我阅读 ORM 相关的东西越多,我就越认为 Oracle UDT 对象是一个障碍。在这种情况下,普通的 ADO.NET 和生成的 C# 实体类似乎是唯一的方法。也许automapper.org可用于将域对象映射到 UDT 对象。