Linq技术一:Linq to SQL和Devart Linq to SQL Model

Linq技术是在C# 3.0里面发布的,最初包含Linq to SQL, Linq to Object 和Linq to xml。然后在4.0里面发布了DLR动态语言运行时,所以有了Linq动态实现方式。

介绍一下命名空间:

System.Linq;

System.Linq.Expressions;

System.XML.Linq;

System.Data.Linq;


介绍一下Linq相关的接口:

IEnumerable<T>, IQueryable<T>

任何继承了上面接口的对象都可以使用Linq技术。


先说Linq to SQL:

在Visual Studio 2010里面可以创建Linq To SQL类,直接在项目里面选择新增Linq to Sql即可。目前最新版本Visual Studio 2013里面也支持Linq to Sql,还多了几种选择:devart Entity Model, Devart Linq to SQL Model, Devart NHibernate Model. 来说一下Devart,Devart是Devart Software,一家软件公司,扩充了这些方法。可访问:http://forums.asp.net/t/1725858.aspx?New+Version+of+Devart+Entity+Developer+with+ENUM+Support+and+Other+Enhancements

Linq to SQL class和Devart Linq to SQL Model有些细微差别,如果是Linq to SQL class,可以直接把SQL stored procedure和function当作一个实体来操作,可以自己选择将哪些表添加到DBContext里面,但Devart是默认全部添加,不能添加SP和function。Linq to SQL不具有code first或model first的功能,默认操作是database first, 但Devart具有两种选择,这个可以算是Linq to SQL的升级应用,微软可能选择停止更新Linq to SQL。


Microsoft Linq to SQL编辑窗口:


Devart编辑窗口:


Devart 新建窗口:


在操作上没有多大区别,看看具体增删改和查询怎么操作:


       //实例化DBContext
        OTPDataContext devartDB = new OTPDataContext();
        DataClasses1DataContext dbContext = new DataClasses1DataContext();

        //返回特定行数的列表
        public IQueryable<DataListForDemo> GetList(int count)
        {
            var dataList = dbContext.DataListForDemos.Take(count);           

            return dataList;
        }

        //新增数据
        public void insertDB(DataListForDemo model)
        {
            dbContext.DataListForDemos.InsertOnSubmit(model);
            dbContext.SubmitChanges();
        }

        //删除数据
        public void deleteData(DataListForDemo model)
        {
            dbContext.DataListForDemos.DeleteOnSubmit(model);
            dbContext.SubmitChanges();
        }

        //修改单行数据
        public void updateDBByID(DataListForDemo model)
        {
            DataListForDemo iModel = dbContext.DataListForDemos.Where(p => p.ID == model.ID).SingleOrDefault();
            iModel.col1 = model.col1;
            iModel.col2 = model.col2;
            iModel.col3 = model.col3;
            dbContext.SubmitChanges();
        }

        //修改多行数据
        public void updateDBMulti(DataListForDemo model)
        {
            var iModel = dbContext.DataListForDemos.Where(p => p.col1 == model.col1);
           
            foreach(DataListForDemo m in iModel)
            {
                m.col2 = model.col2;
                m.col3 = model.col3;
            }

            dbContext.SubmitChanges();
        }


       //运行调试时或记录日志的方法:
       dbContext.Log("Log Info:xxx");
       dbContext.GetCommand(IQueryable); //返回Linq生成的SQL语句,非常方便调试或记录日志用


数据库连接的定义是在目录下面的app.config配置文件里面:
<connectionStrings>
        <add name="UTConsoleApplication.Properties.Settings.OTPConnectionString"
            connectionString="Data Source=localhost;Initial Catalog=OTP;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>

可以看到name的值实际上是一个资源字符串,再看看Settings.Settings资源文件,打开Properties目录:
Key : OTPConnectionString
Value : Data Source=localhost;Initial Catalog=OTP;Integrated Security=True

数据库连接是在什么地方用到的呢?看看DBML下面的文件:

第一个无参数的构造函数,字符串放到了Base里面,
public DataClasses1DataContext() :
    base(global::UTConsoleApplication.Properties.Settings.Default.OTPConnectionString, mappingSource)
  {
          OnCreated();
  }

因为DataClasses1DataConext继承自DataContext,那么看看DataContext对应的数构造函数是什么:
//
        // Summary:
        //     Initializes a new instance of the System.Data.Linq.DataContext class by referencing
        //     a file source and a mapping source.
        //
        // Parameters:
        //   fileOrServerOrConnection:
        //     This argument can be any one of the following:The name of a file where a
        //     SQL Server Express database resides.The name of a server where a database
        //     is present. In this case the provider uses the default database for a user.A
        //     complete connection string. LINQ to SQL just passes the string to the provider
        //     without modification.
        //
        //   mapping:
        //     A source for mapping.
        public DataContext(string fileOrServerOrConnection, MappingSource mapping);

因为是系统函数无法看到具体实现,但可以理解的是在DataContext里面的这个构造函数作了数据库连接的动作。

在designer.cs文件里面自动生成了实体类、和没有具体实现的增删改的部分方法(partial method)。所以只需要根据自己的需求写新方法就行,这就是ORM的好处所在。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Entity Developer是一个强大的ORM设计器,支持 ADO.NET Entity Framework, NHibernate, LinqConnect 和 LINQ to SQL。你可以使用模型首先和数据首先的方法设计ORM模型并生成C#或者Visual Basic .NET代码。它引入了新的方法设计ORM模型,提高开发效率,简化数据库应用的开发。 可视化ORM模型设计器并支持代码生成 Entity Developer允许你可视化创建和编辑NHibernate,Entity Framework,LinqConnect 和 LINQ to SQL模型,无需一行XML代码。它支持创建各种一映射,如表分割,映射实体到多个表,复杂类型,继承分层,从Sel ect语句创建实体,从SQL代码创建方法等。由于使用了类似T4的模板,所以代码生成非常灵活,另外你还能创建自己的模板用于其他的编程语言。 多ORM支持 Entity Developer 支持 NHibernate, Entity Framework,LinqConnect 和 LINQ to SQL模型。 强大的代码生成 Entity Developer提供基于T4类似的模板生成代码框架,针对不同使用情况提供大量预定义的模板,模板化生成上下文,实体,映射,支持流,属性和XML映射,包括持久层感知和持久层无感知实体,支持验证框架等。另外模板提供自动生成MVC Controller和视图的功能。Data Transfer Object 提供转换器类和Data Annotations metadata类。 适用于各种.NET ORM的可视设计器 Entity Developer可以帮助您在一个统一的界面中为各种.NET ORM设计模型。您可以在一个工具中获得对所有ORM的支持,或者您可以购买单独的版本,与其中一个受支持的ORM一起使用。 支持EntityFramework和EF Core 对于Entity Framework v1-v6以及最新的EF Core2.2,我们的设计器提供了比EDM设计器更多的设计和代码生成功能。 Entity框架核心 设计实体框架核心模型可视化。通过大量设置获得模型优先和数据库优先支持。 NHibernate 直观地编辑NHibernate模型,为NHibernate 3或4生成XML,流畅或Loquacious映射和配置。 LINQ to SQL 直观地设计LINQ to SQL模型。 获得更好的模型优先和数据库优先支持,并轻松将模型更改应用于数据库。 LinqConnect 积极支持DevartLINQ to SQL兼容ORM以及更多功能,Entity Developer作为其ORM设计器。 Telerik数据访问 可视化设计最新Telerik数据访问版本的模型,并通过Fluent Mapping API生成仅代码映射。 功能丰富的设计器,具有强大的代码生成功能 无缝Visual Studio集成 支持Model-First和Database-First 可视化创建几乎所有类型的映射 将模型更改应用于数据库,反之亦然 强大的模型重构 优化大型模型的工作 设计时LINQ / ESQL / HQL查询执行 查看和编辑源表中的数据 背景模型验证 基于T4模板的代码生成 大量预定义模板 生成C#或VB代码 每个类的文件,部分类生成 自定义属性支持 自定义模板支持 带语法高亮的模板编辑器 高质量的生成代码 高度可定制的一代

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值