我们如何创建一个可以由任何使用不同数据源提供者或web服务的asp.net应用程序使用的通用数据访问层?
我们可以为使用Web服务的应用程序创建数据访问层吗?
答案 0 :(得分:5)
您可以查看存储库模式。存储库是一个外观,它将持久化对象呈现为内存中的集合。无论您选择哪种提供者获取数据都隐藏在Repository界面后面。
答案 1 :(得分:2)
你有很多选择! :-)
您提到要使用asp.net和Web服务中的数据访问层(DAL)。没问题。
基本上,你需要弄清楚的是你想要遵循的基本设计,并将DAL封装到自己的程序集中,可以从各种消费者中使用/引用。
有很多方法可以做到这一点:
您面临的最大挑战是确定一种标准的做事方式,并坚持下去。
查看一些文章 - 也许他们会给你一个想法:
答案 2 :(得分:1)
尝试www.asp.net上的教程:
答案 3 :(得分:0)
我发现并喜欢使用的是Repository或Provider模式。存储库模式只是确保您具有对存储库的标准访问权限,例如商店目录或CMS系统。你创建了一个接口,在我的情况下暴露了IQueryable的集合,对象或数据模型只是标准的c#类,现在有额外的绒毛POCO(普通旧CLR对象)。
public interface ICMSRepository {
IQueryable<ContentSection> GetContentSections();
void SaveContentSection(ContentSection obj);
}
然后只为不同的提供程序实现接口,例如LINQ to SQL上下文,确保将POCO对象作为可查询对象返回。关于这一点的好处是,您可以从IQueryable中获取扩展方法,以便轻松获得所需内容。像:
public static IQueryable<ContentSection> WithID(this IQueryable<ContentSection> qry, int ID) {
return from c in qry select c;
}
//Allow you to chain repository and filter to delay SQL execution
ICMSRepository _rep = new SqlCMSRepository();
var sec = _rep.GetContentSections().WithID(1).SingleDefault();
使用Interface方法的好处是能够在运行时测试和模拟它或依赖注入您喜欢的存储。
我在ASP.Net框架中使用的另一种方法很多是Provider模型。这是类似的,除了您创建单例抽象类的接口,然后您在抽象类之上的实现将定义存储访问方式(XML,平面文件,SQL,MySql等)。基本抽象类也将基于配置创建它的单例。请参阅提供者模型上的more info。
否则你可以查看this similar question。
答案 4 :(得分:0)
T的IR是一般的好方法。此接口应公开GetAll,GetByID,Insert,Delete和Submit方法 但是,将业务逻辑保留在Repository类之外并将其置于自定义逻辑/服务类中非常重要 此外,如果您在GetAll方法中返回IQueriable,您可以在各种IRepository实现中看到,UI层也可以查询该IQueriable接口。但是查询对象图应该保留在Repository层中。围绕这个问题有很多争论。
答案 5 :(得分:0)
使用接口:
的IDbConnection IDbCommand的 IDbDataAdapter IDataReader的