在.NET3.5平台上使用LinQ to SQL + NBear 创建三层WEB应用

看了《一步一步学Linq to sql》和《在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统》
这两个系列文章后,因为一直使用NBear,所以试着综合了一下主要用NBear.IOC其它的NBear.data里的就没有会了,相应的使用LINQ来做数据处理.
之前一直使用NBear做些WEB应用主要感觉NBear分层清晰,最重要的开发速度快,很少有重复的代码.代码很简洁.相关的实体和数据增删改查的代码都能自动生成.整个应用,只需写aspx.cs里的代码和业务代码.具说NBear的数据处理有损耗, 而Linq又是建立在ado.net之上,这们结合一下,用NBear的快捷+Linq的高性能,关于NBear的使用可以看一下我的Blog中的如何利用NB代码生成工具和NBear框架,快速开发WEB项目,有点偏题了.呵..




接下来要转入正题说说使用NBear+LINQ的多层构架Demo。我们将建立以下项目:

A,网站项目 WebSite:表现层

B,类库项目 ns.ServiceInterfaces  :定义数据访问服务接口

C,类库项目 ns.ServiceImpls:定义数据访问服务的实现

D,类库项目 ns.Entities:实体(LINQ)

项目之间的引用如下:

A引用B和D;

B引用D和NBear.IoC,System.Data.Linq程序集

C引用B、D、NBear.IoC,System.Data.Linq程序集


项目都建好后,第一步就是在ns.Entities项目中用vs创建

 创建Linq to sql后,在VS链接上SQL,然后把拖上去.实体就生成OK了 这样ns.Entities就OK了

第二步 ns.ServiceInterfaces  :定义数据访问服务接口
这一步主要定义好表示层要用的数据操作的方式.表示层将直接调用接口.cs里不会有数据处理的代码. 实现分层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NBear.IoC.Service;
using System.Data.Linq;
using ns.Entities;

namespace ns.ServiceInterfaces
{
    public interface IArticleServices : IServiceInterface
    {
         int InsertArticle();
         Table<Article> GetArticleAll();  //取所有文章数据
    }
}

第三步就是 ns.ServiceImpls:定义数据访问服务的实现
主要是接口的实现层,数据处理的代码将在这个层时来完成

using System.Text;
using ns.ServiceInterfaces;
using ns.Entities;
using System.Data.Linq;

namespace XRW.ServiceImpls
{
    public class ArticleService : IArticleServices
    {

        private DataClassesDataContext odbc = new DataClassesDataContext(); //
       
        public int InsertArticle()
        {
            return 1 + 1;
        }

        public Table<Article> GetArticleAll()
        {
            try
            {
               return odbc.Article;
            }
            catch (Exception exp)
            {
                 throw exp;
            }
        }
    }
}

在数据访问层创建的DataContext实例负责访问数据库操作相关的方法和属性。
DataContext类包含了数据库表的属性和产生动态SQL脚本执行数据库操作的相关方法。
对于每一个数据表,均有一个对应的实体类,实体类的属性映射到实际的数据表。
访问DataContext类的属性,可以返回一个Table实体集合。
例如:return odbc.Article;

第三步就是在aspx.cs 使用了.
通过前面的实体生成,接口的定义和接口的实现,表示层完全不用和数据库打交道了.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            int i = ServiceFactory.Create().GetService<IArticleServices>().InsertArticle();
            int d = i;
            Table<Article> articleTab = ServiceFactory.Create().GetService<IArticleServices>().GetArticleAll();

            GridView1.DataSource = from tab in articleTab select new { tab.ArticleID, tab.Author, tab.CreateDate };
               
            GridView1.DataBind();
        }
    }

另外NBear.ioc要使用起来,还需要在web.config 里配置
<!-- 设置 castle,entityConfig,log4net  -->
<configSections>
 <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
 <section name="entityConfig" type="NBear.Common.EntityConfigurationSection, NBear.Common"/>
</configSections>

<castle>
<components>
 <component id="Article" service="ns.ServiceInterfaces.IArticleServices, ns.ServiceInterfaces" type="ns.ServiceImpls.ArticleService, ns.ServiceImpls"/>
 </components>
</castle>

如果没有配置好会提示找不到相应的接口实现
以上代码是不是很简洁,每层负责每层的工作.
当然以上只是个人观点,也只是做了一个小例子,还没有实际在项目中使用,拿出来跟大家讨论交流.

以上需要了解的知识点:NBear使用和配置,LINQ的使用,Ioc容器,以及多层的理解.欢迎交流NBear的QQ群:7731621

作者:王林 稻草人.net 'Blogs
出处:
转载请注明此处,谢谢!
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归修改子目录及文件的权限

背景&#xff1a;当我们的虚拟机和windows系统共享windows上的一个目录(记为&#xff1a;A)时&#xff0c;把该目录下的目录(记为B)移动(mv)到linux下的任意目录下&#xff0c;这个目录B及下面的子目录或文件的权限都是rwx(777)&#xff0c;这是他们在windows下的权限。因此用l…

JS之字符串连接方法join

作用&#xff1a;join() 方法用于把数组中的所有元素放入一个字符串&#xff0c;元素是通过指定的分隔符进行分隔的。&#xff08;作用和split正好相反&#xff09; 语法&#xff1a;arrayObject.join(separator) 参数&#xff1a;可选。指定要使用的分隔符。如果省略该参数&…

2.[Yii]创建与设置默认控制器及载入模板

1.创建控制器与访问 class IndexController extends Controller {//访问 index.php?rindex/index//r后面 其中第一个是控制器&#xff0c;第二个是方法&#xff0c;r就是路由route的缩写public function actionIndex(){$this->render("index");//载入模板文件} }…

程序根据手机机型设置自定义底部导航距离

需求: iponeX 以上机型,手机底部有弧度,自己写的导航栏会被遮住, 需要判断手机机型,做兼容设置. 解决: //app.js App({/*** 当小程序初始化完成时&#xff0c;会触发 onLaunch&#xff08;全局只触发一次&#xff09;*/onLaunch: function() {var that this;//获取手机型号…

张雨生《口是心非》

[hjp3]hjptypesong&player1&sonhttp://www.justin-rao.net/songs/[1997]%20ZhangYuSheng%20-%20KouShiXinFei%20-%2002%20-%20KouShiXinFei.mp3&autoplayno&captionfalse&lrc&autoreplay1&bgcolorFFFFFF&width200&height20[/hjp3] 转载于:…

JS之颠倒数组元素的reverse方法

作用&#xff1a;reverse() 方法用于颠倒数组中元素的顺序 语法&#xff1a;arrayObject.reverse() 注意&#xff1a;该方法会改变原来的数组&#xff0c;而不会创建新的数组 实例1&#xff1a;

图文:详解数据库Oracle 11g的基本安装

From: http://blog.csdn.net/wjcreator123/article/details/3243041 下面提供的是Oracle 11g的下载地址和基本安装过程&#xff08;仅作参考&#xff09; 第一步&#xff1a; oracle服务端下载: http://down.zdnet.com.cn/detail/9/82225.shtml 客户端: http://blog.csdn.net…

acid(数据库事务正确执行的四个基本要素的缩写)

ACID&#xff0c;指数据库事务正确执行的四个基本要素的缩写。包含&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、持久性&#xff08;Durability&#xff09;。一个支持事务&am…

mysql数据库中查看当前使用的数据库是哪个数据库?

一、用select database()语句 语句 mysql > select database();结果 解释&#xff1a;表示的是当前使用的是哪个数据库或者说会话登录到了哪个数据库中。 二、用show tables语句 语句 mysql > show tables;结果 解释&#xff1a;查询出来的结果中&#xff0c;第一行…

JS之返回数组指定元素的slice

作用&#xff1a;slice() 方法可从已有的数组中返回选定的元素 语法&#xff1a;arrayObject.slice(start,end) 参数1&#xff1a;必需。规定从何处开始选取。如果是负数&#xff0c;那么它规定从数组尾部开始算起的位置。也就是说&#xff0c;-1 指最后一个元素&#xff0c;…

使用 ADO.NET 的 NextResult 方法取得多个 Result Set

(本帖在版工的旧 Blog 中&#xff0c;发表日期为 2007/04/06) (本帖有些 Hyperlink 是连到台湾的网站&#xff0c;若无法连结&#xff0c;麻烦请留言反应)从 ADO.NET 1.x 开始&#xff0c;DataReader 就可以在单一次的查询动作中&#xff0c;「批次 (batch)」读取 T-SQL 语句以…

linux下启动与关闭oracle监听与实例

linux中启动oracle主要分两步&#xff1a;一个是启动监听器&#xff0c;一个是启动实例(一般都忘记了这一步),具体命令如下&#xff0c;提供给大家参考一下&#xff1a; 1:连接服务器 telnet ip 2:输入管理员用户和密码 user-name:oracle password:oracle 3:进入oracle根目录 …

同步和互斥

一、同步和互斥的基本概念 现代操作系统基本都是多任务操作系统&#xff0c;即同时有大量可调度实体在运行&#xff0c;同时运行可能是真的同时运行&#xff08;SMP架构中&#xff09;&#xff0c;也可能仅仅是操作系统提供的服务&#xff08;通过将CPU时间分片&#xff0c;并将…

Mysql常用命令行大全

1、连接Mysql 格式&#xff1a; mysql -h主机地址 -u用户名 &#xff0d;p用户密码 1、连接到本机上的MYSQL。 首先打开DOS窗口&#xff0c;然后进入目录mysql\bin&#xff0c;再键入命令mysql -u root -p&#xff0c;回车后提示你输密码.注意用户名前可以有空格也可以没有空…

React开发(113):git 操作记录

git reflog 可以查看所有分支的所有操作记录&#xff08;包括&#xff08;包括commit和reset的操作&#xff09;&#xff0c;包括已经被删除的commit记录&#xff0c;git log则不能察看已经删除了的commit记录 具体一个例子&#xff0c;假设有三个commit&#xff0c; git st: …

从printf谈可变参数函数的实现

作者&#xff1a;戎亚新 摘要&#xff1a;一直以来都觉得printf似乎是c语言库中功能最强大的函数之一&#xff0c;不仅因为它能格式化输出&#xff0c;更在于它的参数个数没有限制&#xff0c;要几个就给几个&#xff0c;来者不拒。printf这种对参数个数和参数类型的强大适应性…

JS之数组删除/添加项目方法splice

用法&#xff1a;splice() 方法向/从数组中添加/删除项目&#xff0c;然后返回被删除的项目 注:1&#xff1a;该方法会改变原始数组 语法&#xff1a;arrayObject.splice(index,howmany,item1,…..,itemX) 参数1&#xff1a;必需。整数&#xff0c;规定添加/删除项目的位置&…