zoukankan      html  css  js  c++  java
  • Link To Sql简单

    Linq及其扩展

    Linq是一种数据查询语言(它能够从多种数据源中查询数据). 现在基于Linq的扩展有:

    1. Linq To Object:主要是从内存对象中查询数据
    2. Linq To Sql:主要是从MS Sql Server数据库中操纵(查询新增修改删除)数据
    3. Linq To XML:主要是从XML片段或XML文档中查询数据

     

    Linq To Sql简介

    Linq To Sql是一个微软在.NET Framework 3.5中推出的一款ORM(Object  Relation  Model)实体框架.一个好的实体框架除了能够将数据表映射为实体类,还应该支持使用面向的思想去操纵关系型数据库.现在比较流行的ORM框架包括:Linq To SqlEntity FrameworkNhibernate.

    我们在使用Linq To Sql的过程中,很少去手写SQL语句就能实现常见的数据增删改差操作.但是它的底层实现仍然是Ado.net.那么如何检测Linq To Sql生成的SQL语句呢?通过DataContext的Log属性即可实现检测功能.

     

    Linq To Sql设计器

    在服务器资源管理器中通过拖拽的方式,将数据表放置到Linq To Sql的设计器区域后,VS自动将这些数据表生成N+1(N为数据表的个数)个类.这些类大致可以分为2:一种是数据库上下文,另一种是实体类.数据库上下文类就是名称以DataContext结尾的类,它继承自Sytem.Data.Linq.DataContext.

    他们的作用分别是:DataContext类用于和数据库交互(增删改查),每次进行数据库操作时,都应该先创建该类对象;

    而每一个实体类则和数据表相对应.

    DataContext的特性标记为Database,表示与数据库相关

    实体类的特性标记是Table,表示与数据表相关

    实体类中属性的特性标记是Column,表示与数据列相关

     

    DataContext数据库上下文类的常用属性和方法

    CreateDatabase():创建数据库

    DeleteDatabase():删除数据库

    DatabaseExits():判断数据库是否存在

    Log:该属性用于检测和写入LINQ TO SQL生成的SQL语句

     

    Linq To Sql常用操作

    新增数据

    void  InsertOnSubmit():实现每次新增1条记录

    void  InsertAllOnSubmit():实现一次新增多条记录

    注意:调用InsertOnSubmit,一定要再调用DataContext.SubmitChanges();

     

    修改数据

    首先,查询到要修改的元素

    其次,改变元素相应的属性

    最后,调用dataContext.SubmitChanges()

     

    删除数据

    首先,查询到要删除的元素

    其次,调用void DeleteOnSubmit()删除单个元素,如果要删除多个可以调用void DelteAllOnSubmit()

    最后,调用dataContext.SubmitChanges();

     

    数据查询

    数据查询时,2种常用的使用方式.一种是使用linq的标准语法;一种是使用Lambda表达式扩展方法.

    单表查询:

     

    多表查询:

     

    典型应用场景

    场景1:在一个页面中实现:添加一个工资模版,以及该工资模版的多个工资条目

     

    做法一:

     

    做法二:

     

    上述两种做法都可以实现功能.做法一是先实现工资模版的新增,然后再新增工资条目.做法二是向工资模版对象中添加多个工资条目,然后向数据库提交工资模版.

    需要注意的是,做法一中为工资条目对象设置了工资模版ID,而做法二并没有为工资条目设置工资模版ID.但为什么最后效果却是一样的呢?

    因为我们将工资条目添加到工资模版对象中时,linq to sql会自动将主外键关系的字段赋值.

    场景二:使用Linq To Sql进行分页

    分页功能需要使用两个函数进行组合:Skip()Take()

    Skip(int count):跳过count条数据

    Take(int count):从开始位置提取count条记录

    分页查询: dataContext.XXX.Skip(pageIndex * pageSize).Take(pageSize)

    pageIndex是要提取的第几页记录.pageIndex >= 0

    pageSize是每页显示的记录条数

     

     

     

     

    其他

    • EntitySet<T>:该类表示数据实体的集合
    • System.Data.Linq.Table<T>:该类表示数据表对象
    • 如何判定通过Linq To Sql进行数据的修改删除新增是否成功?

    因为InsertOnSubmit方法和DataContext.SubmitChanges()方法都没有任何返回值,所以无法通过他们判断出是否操作成功.判断的标准就是:如果不抛出异常就成功,抛出异常肯定就失败了.

    • 对于标识列(自动生成列)而言,在调用DataContext.XXX.InsertOnSubmit()后是无法获取标识列的值的;只有在调用DataContext.SubmitChanges()后方能获取标识列的值.

     

     

  • 相关阅读:
    zookeeper curator ( 实战一)
    【转】HDMI之TMDS信号
    【转】LVDS基础、原理、图文讲解
    【原】HDMI输出接口传输速率计算
    【转】 HDMI介绍与流程
    【转】 glibc detected *** corrupted double-linked list:错误的原因有如下三种可能
    【转】 ISP-镜头阴影校正(LSC)
    【转】 ISP-黑电平校正(BLC)
    【转】 ISP概述、工作原理及架构
    【转】 VGA时序及其原理
  • 原文地址:https://www.cnblogs.com/welcometothere/p/4216645.html
Copyright © 2011-2022 走看看