C# 通用DAL建筑技术

C# 通用DAL建筑技术,c#,.net,architecture,data-access-layer,C#,.net,Architecture,Data Access Layer,目前,我们的客户机在多个数据源(MS SQL、Oracle、MS Access、Web服务等)中存储数据 我们已经创建了一个框架来处理MS SQL、Oracle和Access的大多数场景,但是一些客户端不愿意提供直接的DB访问,因此只提供Web服务 我无法想出一个通用的解决方案来处理手头5%的问题,以便为Web服务以及其他服务创建数据源 有人能帮我处理这种情况吗 -Naga我认为其中一个选择是使用存储库模式。请看下面的存储库模式示例: 我希望这会有所帮助。我认为其中一个选择是使用存储库模式。请看

目前,我们的客户机在多个数据源(MS SQL、Oracle、MS Access、Web服务等)中存储数据

我们已经创建了一个框架来处理MS SQL、Oracle和Access的大多数场景,但是一些客户端不愿意提供直接的DB访问,因此只提供Web服务

我无法想出一个通用的解决方案来处理手头5%的问题,以便为Web服务以及其他服务创建数据源

有人能帮我处理这种情况吗


-Naga

我认为其中一个选择是使用存储库模式。请看下面的存储库模式示例:


我希望这会有所帮助。

我认为其中一个选择是使用存储库模式。请看下面的存储库模式示例:


我希望这会有所帮助。

我认为其中一个选择是使用存储库模式。请看下面的存储库模式示例:


我希望这会有所帮助。

我认为其中一个选择是使用存储库模式。请看下面的存储库模式示例:


我希望这会有所帮助。

将您的Web服务数据源视为与MS SQL或Oracle数据源相同的数据源。它只是一个额外的具体数据存储。遵循这样的模式:

public interface IRepository
{
 List<EmployeeModel> GetEmployees();
}
公共接口IRepository
{
列出GetEmployees();
}
在这里,EmployeeModel是一个简单的C#类,与Oracle、MS SQL或web服务无关

public class SqlRepository : IRepository
{
  public List<EmployeeModel> GetEmployees()
  {
   // get it from SQL using ADO.NET or Linq2Sql
   // transform into EmployeeModel using Automapper/manual and return.
  }
}

public class WebServiceRepository : IRepository
{
  private readonly ProxyClient _proxy; // or helper

  public List<EmployeeModel> GetEmployees()
  {
   // get it from the ASMX using Proxy Helpers with return type as data contracts.
   // transform the data contracts into EmployeeModel using Automapper/manual and return.
  }
}
公共类SqlRepository:IRepository { 公开名单 { //使用ADO.NET或Linq2Sql从SQL获取它 //使用Automapper/manual转换为EmployeeModel并返回。 } } 公共类webservicepository:IRepository { 私有只读代理客户端_proxy;//或帮助程序 公开名单 { //使用返回类型为数据协定的代理帮助程序从ASMX获取它。 //使用Automapper/manual和return将数据合同转换为EmployeeModel。 } }
将Web服务数据源视为与MS SQL或Oracle数据源相同的数据源。它只是一个额外的具体数据存储。遵循这样的模式:

public interface IRepository
{
 List<EmployeeModel> GetEmployees();
}
公共接口IRepository
{
列出GetEmployees();
}
在这里,EmployeeModel是一个简单的C#类,与Oracle、MS SQL或web服务无关

public class SqlRepository : IRepository
{
  public List<EmployeeModel> GetEmployees()
  {
   // get it from SQL using ADO.NET or Linq2Sql
   // transform into EmployeeModel using Automapper/manual and return.
  }
}

public class WebServiceRepository : IRepository
{
  private readonly ProxyClient _proxy; // or helper

  public List<EmployeeModel> GetEmployees()
  {
   // get it from the ASMX using Proxy Helpers with return type as data contracts.
   // transform the data contracts into EmployeeModel using Automapper/manual and return.
  }
}
公共类SqlRepository:IRepository { 公开名单 { //使用ADO.NET或Linq2Sql从SQL获取它 //使用Automapper/manual转换为EmployeeModel并返回。 } } 公共类webservicepository:IRepository { 私有只读代理客户端_proxy;//或帮助程序 公开名单 { //使用返回类型为数据协定的代理帮助程序从ASMX获取它。 //使用Automapper/manual和return将数据合同转换为EmployeeModel。 } }
将Web服务数据源视为与MS SQL或Oracle数据源相同的数据源。它只是一个额外的具体数据存储。遵循这样的模式:

public interface IRepository
{
 List<EmployeeModel> GetEmployees();
}
公共接口IRepository
{
列出GetEmployees();
}
在这里,EmployeeModel是一个简单的C#类,与Oracle、MS SQL或web服务无关

public class SqlRepository : IRepository
{
  public List<EmployeeModel> GetEmployees()
  {
   // get it from SQL using ADO.NET or Linq2Sql
   // transform into EmployeeModel using Automapper/manual and return.
  }
}

public class WebServiceRepository : IRepository
{
  private readonly ProxyClient _proxy; // or helper

  public List<EmployeeModel> GetEmployees()
  {
   // get it from the ASMX using Proxy Helpers with return type as data contracts.
   // transform the data contracts into EmployeeModel using Automapper/manual and return.
  }
}
公共类SqlRepository:IRepository { 公开名单 { //使用ADO.NET或Linq2Sql从SQL获取它 //使用Automapper/manual转换为EmployeeModel并返回。 } } 公共类webservicepository:IRepository { 私有只读代理客户端_proxy;//或帮助程序 公开名单 { //使用返回类型为数据协定的代理帮助程序从ASMX获取它。 //使用Automapper/manual和return将数据合同转换为EmployeeModel。 } }
将Web服务数据源视为与MS SQL或Oracle数据源相同的数据源。它只是一个额外的具体数据存储。遵循这样的模式:

public interface IRepository
{
 List<EmployeeModel> GetEmployees();
}
公共接口IRepository
{
列出GetEmployees();
}
在这里,EmployeeModel是一个简单的C#类,与Oracle、MS SQL或web服务无关

public class SqlRepository : IRepository
{
  public List<EmployeeModel> GetEmployees()
  {
   // get it from SQL using ADO.NET or Linq2Sql
   // transform into EmployeeModel using Automapper/manual and return.
  }
}

public class WebServiceRepository : IRepository
{
  private readonly ProxyClient _proxy; // or helper

  public List<EmployeeModel> GetEmployees()
  {
   // get it from the ASMX using Proxy Helpers with return type as data contracts.
   // transform the data contracts into EmployeeModel using Automapper/manual and return.
  }
}
公共类SqlRepository:IRepository { 公开名单 { //使用ADO.NET或Linq2Sql从SQL获取它 //使用Automapper/manual转换为EmployeeModel并返回。 } } 公共类webservicepository:IRepository { 私有只读代理客户端_proxy;//或帮助程序 公开名单 { //使用返回类型为数据协定的代理帮助程序从ASMX获取它。 //使用Automapper/manual和return将数据合同转换为EmployeeModel。 } }
您所说的
通用解决方案
是什么意思?最好的方法是提供对上层DAL的直接访问(通过WCF/Web服务),这将访问下层DAL(DB)。感谢您的快速响应。我会尽量多给你一些我要找的东西。如果我有6个客户端,它们中的每一个都使用不同的方式来存储数据,即MSSQL、Oracle、Web服务等。我们可以编写一个通用DAL层来覆盖SqlClinet、OleDb、ODBC,但缺点是当我们遇到Web服务时。我们如何为web服务创建DAL。点击用于web服务的DAl并获取要在UI中显示的数据。您所说的
通用解决方案是什么意思?最好的方法是提供对上层DAL的直接访问(通过WCF/Web服务),这将访问下层DAL(DB)。感谢您的快速响应。我会尽量多给你一些我要找的东西。如果我有6个客户端,它们中的每一个都使用不同的方式来存储数据,即MSSQL、Oracle、Web服务等。我们可以编写一个通用DAL层来覆盖SqlClinet、OleDb、ODBC,但缺点是当我们遇到Web服务时。我们如何为web服务创建DAL。点击用于web服务的DAl并获取要在UI中显示的数据。您所说的
通用解决方案是什么意思?最好的方法是提供对上层DAL的直接访问(通过WCF/Web服务),它将