澳门新蒲京娱乐

图片 1
Java集合框架,泛型的优点
新蒲京官方下载 8
新蒲京官方下载:非中文自动翻译,教你一步一步用

利用开辟之Linq和EF

本章简言

Java进击C#——应用开拓之Linq和EF,

本章简言

上1章笔者对于WinForm开荒进度用到的几个知识点做了讲学。大家方能够此为起先实行学习。而本章我们来说贰个跟OEnclaveM观念有关的知识点。在讲在此之前让大家想转手关于JAVA的hibernate知识点。hibernate也是OEvoqueM框架。记得hibernate里面有2个叫HQL。先不管HQL的好与坏。主借使领略HQL的目地是何许。OEscortM的企图就是为了让用户在操作数据的时候用上边向对象的合计来看,而不是2维数据了。所以HQL小编以为正是一个面向对象观念的SQL语句。那么为啥作者要讲到HQL呢?事实上作者感到Linq有某个跟他类似。假设项目架构是三层的话,正是让业务层的开采职员不用在看贰维数据了。就连SQL语句都以面向对象思想格局来操作了。而EF(Entity
Framework)能够说正是hibernate。正是能够知道为Linq的数据源。可是HQL要在hibernate下面手艺有意义。Linq却足以不用EF。

Linq语法

.NET对于Linq知识的分类让小编有时候认为很无力。为何吗?最早的时候作者认为Linq知识点分叁大块。分别为Linq
to SQL、Linq to Entity、Linq to
Database。随着对Linq使用的充实却开采还有Linq to Xml 、Linq to
Excel等。小编想读者们是或不是看看门道来了。能够说.NET在布署Linq的时候,应该是有丰富的想过以后扩充的难题。当然那不是本章的对象。我在支付进度中最常用的正是Linq
to SQL和 Linq to Entity。另外还有二个叫Linq to Object.对于Linq to
Object笔者一向以为就是Linq to
Entity。小编的情致是指他们的学识该应放在一齐。好了。先笔者讲一下有关Linq
to SQL。

对于Linq to
SQL来说,只要学习SQL语法的人都不要担忧很轻易就上手。记得笔者学习的时候,一看本人去不就HQL的另1种造型呢?当然
HQL可不是Linq如故要学习一下的。讲那么多未有用。用列子才是最佳的。

一、建立EF环境。先建2个档案的次序,然后经过NUGET来获得相应的EF的DLL。对于NUGET是怎么。相信看过《Java进击C#——项目支付碰着》的人应当能够了然到。选拔“引用”右击》处理Nuget程序包。

图片 1

深信不疑看了地点的图纸的时候,我们早就意识了EntityFramework了吗。点击“安装”就能够了。那年项目就能多出贰个叫packages.config文件。那其间著录着目前安装的dll消息。同时物理目录里面会多出贰个文书夹packages来存在那几个dll。

图片 2

大家看出引用里面多出了关于EF的引用dll。这一年大家就足以做EF的业务了。

二、新建EF上下文。EF有一个很入眼的类。能够说是上学EF的核心点。这一个类正是DbContext。笔者新建一类叫AomiContext承继他。如下

public class AomiContext : DbContext
{

}

DbContext类有多少个构造函数。小编这里讲1个常用的啊。如下

 public DbContext(string nameOrConnectionString);

就是个构造函数意思正是传二个接连字符串或是配置文件的连续字符的计划名。记得上壹节中讲的App.config了呢。没有错就是要用到他。看一下小编写的始末吧。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="aomi" connectionString="Data Source=.;Initial Catalog=Ado;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

上面的connectionStrings部分是小编本人写的。其余是自动生成的。.NET本身有叁个布署连接字符串的节点。大家正是在那一个节点上写入本人的连日就足以了。

<add name="aomi" connectionString="Data Source=.;Initial Catalog=Ado;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>

好了。接下来正是把AomiContext类修改一下。让她跟对应的接二连三字符串的安插发生涉及。如下

 public class AomiContext : DbContext
    {
        public AomiContext()
            : base("Aomi")
        { }
    }

看看黑色部分的代码了吧。把Aomi正是对应下面配置add节点的name的值。这年EF会本身去布置文件之中去找。

三、创立表和类的炫人眼目。

对应数据库的表:

CREATE TABLE [dbo].[Catalogs](
    [ID] [int] NOT NULL,
    [CatalogName] [nvarchar](50) NULL,
    [CatalogCode] [nvarchar](50) NULL,
 CONSTRAINT [PK_Catalogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

对应数据库的数量

INSERT [dbo].[Catalogs] ([ID], [CatalogName], [CatalogCode]) VALUES (1, N'小吃', N'c0001')
INSERT [dbo].[Catalogs] ([ID], [CatalogName], [CatalogCode]) VALUES (2, N'计算机', N'c0002')

小编建三个类用于跟数据Curry面包车型大巴表相对应。那一年要记得属性要跟表里里面包车型地铁列名同样子才行。代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqExample
{
    public class Catalogs
    {
        public int ID { set; get; }

        public string CatalogName { set; get; }

        public string CatalogCode { set; get; }
    }
}

有了对应的类之后,还特出。大家还要修改一下AomiContext类。那样子就能够经过AomiContext类来访问对应的类对象了。就是数据了。如下

    public class AomiContext : DbContext
    {
        public AomiContext()
            : base("Aomi")
        { }

        public IDbSet<Catalogs> Catalogs { set; get; }
    }

四、执行EF。

 class Program
    {
        static void Main(string[] args)
        {
            using (AomiContext ac = new AomiContext())
            {
                IQueryable<Catalogs> queryable = from c in ac.Catalogs select c;
                List<Catalogs> catalogList = queryable.ToList();

                foreach (Catalogs catalog in catalogList)
                {
                    Console.WriteLine(string.Format("ID:{0} CatalogName:{1}", catalog.ID, catalog.CatalogName));
                }
            }

            Console.ReadKey();
        }
    }

实行结果:

图片 3

从上边的事例咱们能够见到用了from c in ac.Catalogs select
c;来得到对应的数码。那就是linq to
sql。简章讲她是3个面向对象的SQL语句。SQL语句是以select初叶,结尾不分明。而linq
to
sql一般是以from初阶,以select结尾。表示从哪一个数据源初叶,最终要以什么体统再次来到。不过我们能够观察她重回是3个IQueryable<T>类型。事实这一年他并不曾去实施获得数据。可以解理为她将来只是去组装SQL语句。只到queryable.ToList();才是去施行获得多少。为了学习上的福利小编又加多少个重大字让大家看一下。

using (AomiContext ac = new AomiContext())
            {
                IQueryable<Catalogs> queryable = from c in ac.Catalogs where c.CatalogName.Contains("吃") orderby c.CatalogCode ascending select c;
                List<Catalogs> catalogList = queryable.ToList();

                foreach (Catalogs catalog in catalogList)
                {
                    Console.WriteLine(string.Format("ID:{0} CatalogName:{1}", catalog.ID, catalog.CatalogName));
                }
            }

看完了linq to sql之后,让本人看一下关于linq to
entity又是何等东东啊?可是那样子讲linq的语法都一般。只是用法和写法分歧子而以。把上面的事例变一变呢。

 using (AomiContext ac = new AomiContext())
            {
                //IQueryable<Catalogs> queryable = from c in ac.Catalogs where c.CatalogName.Contains("吃") orderby c.CatalogCode ascending select c;
                IQueryable<Catalogs> queryable = ac.Catalogs.Where(t => t.CatalogName.Contains("吃")).OrderBy(t => t.CatalogCode).Select(c=> c);
                List<Catalogs> catalogList = queryable.ToList();
                foreach (Catalogs catalog in catalogList)
                {
                    Console.WriteLine(string.Format("ID:{0} CatalogName:{1}", catalog.ID, catalog.CatalogName));
                }
            }

观察小编不用多说也明白。正是成为了相应的重中之重字方法而以。没错。正是那样子。那年作者就足以那样子认为不论是Linq
to entity还是Linq to
sql都必供给有照拂的数据源。这里EF便是为她们提供数据源的。他们俩个照拂都以再次回到IQueryable<T>类型。只是Linq
to entity是用艺术。而Linq to sql更加多像SQL语句。

好了。让大家看一下关于linq to object吧。能够如此了讲啊——不管是Linq to
sql仍旧linq to entity他们俩个都离不开linq to object。linq to
object是专对内存中的多寡进行拍卖。大家得以见见地点例子中有出现1段queryable.ToList()。就算小编说ToList()是linq
to object会不会有人喷小编。为何作者说他是linq to
object呢?主假诺ToList()是对于IEnumerable<T>实行静态扩展的。IEnumerable<T>一般都以用来数组和聚众。位于内部存款和储蓄器中的。而位置都以专对于IQueryable<T>类型的。好了。假令你其实认为小编分的畸形的话,那正是毫无分了。都为Linq语法就行了。linq还提供了1部分相比较常用的不二等秘书技。

First:重临第一个数据。未有多少就出生卓殊。同时也足以流传第三个数据的口径作为参数。如queryable.First(t
=> t.CatalogName.Contains(“吃”));。

FirstOrDefault:一样子重回第多少个数据,未有数量的话,就回到NULL。同时也得以流传第一个数据的条件作为参数。

Last:同理获得最后一情势。用法同上同样子。

LastOrDefault:同上同样子。跟FirstOrDefault用法一样子。

Skip:给定3个数字,那么数字后面都不会抽取来,后以的才收取来。一般都跟Take方法一同用来作分页成效。

Take:表示要回来的数据。你能够知晓为SQL语句中的TOP关键字。

让我举个linq to object的列子吧。

List<string> src = new List<string>();
src.Add("a1");
src.Add("b2");
src.Add("c4");
src.Add("d5");
string value = src.First(t => t.StartsWith("a"));
Console.WriteLine(value);

留神:小编是那样子分的。一般静态扩张IQueryable<TSource>
的秘技属于linq to entity。而静态扩充IEnumerable<TSource>则为linq
to object。俩者很像。只是linq to entity必供给有数据源。linq to
object一般是处理内部存款和储蓄器数据。

Entity Framework

Entity
Framework做为ORAV肆M框架之1。所以OTucsonM框架必须有的东西他多有。学习Entity
Framework就非得驾驭她有哪些知识点。Entity
Framework依照开垦格局的例外分为Code First、Model First和Database
First。让小编用土一点的传教来说吧。

Code First格局:就是通过写代码来变化对应的数据库和表。

Model
First形式:事实上跟Code First有有些像。只是她用了.NET的一个叫xxx.edmx的文书来操作而以。通过她来变化对应的数据库和表。

Database
First形式:却前面边俩个相反。先建数据库和表在生成对的类。就是代码。

我们现在要上学Entity Framework。我个人观点读者们最棒选取Code
First格局来学习。为啥。不管是Model First格局照旧Database
First情势半数以上都是软件工具帮您转移对应的代码。所以广大事物大家历来看不到。而Code
First格局便是要开荒人士手把手的写了。记得小编在使用hibernate的时候。并从未说只做1方面包车型大巴业务。一般都以数据库的表建完之后。依然要去写对应的照耀配置文件(xxx.hbm.xml)。好一些就本人写多少个代码生成器。Entity
Framework意图正是帮开垦人士做掉1边的做事。不过那也是小编不爱好的。正因为如此子Entity
Framework多出了三个知识点那就是多少迁移。大家都知晓在支付的长河中。大概会因为那时表未有规划好。突然意识须求追加多个字段。那样个时候Entity
Framework将要做过多职业。要是大家用的是Code
First吧。大家在代码中的类扩张一性格能。那一年Entity
Framework就是要去推断什么属性是旧的。哪些属性是修改的。哪些属性是新增的。然后Entity
Framework在更新数据库。正是Entity Framework的数码迁移。

从地点的教学中大家领略EF想帮自个儿做了另六分之三的事体,所以就非得对数据库操作才行。那么固然存在对数据库设置,对表安装,对数码操作。以下全是在在Code
First形式下的讲说。

1、EF对数据库的设置。实施代码的时候,EF会去判定是还是不是存在对应的数据库。而对数据库举办操作。是创设或许删除在创制。照旧更新呢?主要看您设置相应的数据库操作的情势。那么EF为大家提供了四个。当然我们得以友善写一个。多个类都在System.Data.Entity命名空间下。分别是CreateDatabaseIfNotExists、DropCreateDatabaseAlways、DropCreateDatabaseIfModelChanges。文英好的人都能看得懂是怎么着1会事。

 public AomiContext()
            : base("Aomi")
        {
            Database.SetInitializer<AomiContext>(new CreateDatabaseIfNotExists<AomiContext>());
        }

只顾:关于Database.SetInitializer方法的赋值是能够献身其他地点。但必然要实施EF以前。

2、EF对表的设置。这一个设置大部是关于表和表与表之间的涉嫌何以显示在类和类与类之间的涉嫌。上面我做了多少个简练的照耀例子。

 public class AomiContext : DbContext
    {
        public AomiContext()
            : base("Aomi")
        { }

        public IDbSet<Catalogs> Catalogs { set; get; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Configurations.Add(new CatalogsMap());

        }
    }

上边CatalogsMap类就一定于映射配置文件(xxx.hbm.xml)。当中包涵一对1,1对多,多对多等等的涉嫌也是在这里配置。有少数要留意的是上边浅淡褐代码。就是把映射关系进入EF配置内部

 public class CatalogsMap : EntityTypeConfiguration<Catalogs>
    {
        public CatalogsMap()
        {
            this.HasKey(t => t.ID);
            this.Property(t => t.CatalogName).HasColumnName("CatalogName");
            this.Property(t => t.CatalogCode).HasColumnName("CatalogCode");
        }
    }

叁、对数码的操作。对数码的操作一般正是增加和删除改查了。

增加:

using (AomiContext ac = new AomiContext())
{
      Catalogs catalogs = new Catalogs();
      catalogs.ID = 6;
      catalogs.CatalogName = "商品";
      catalogs.CatalogCode = "s0001";
      ac.Catalogs.Add(catalogs);

      ac.SaveChanges();
}

真相方面包车型客车代码是从未难点。但是施行的时候却会生出错误。为啥吗?小编也不是领略什么来头。查找未有失水准。但是在增加却会出难题。让笔者看一下相当吧。这里笔者只复制出1部分。

       InnerException: System.Data.SqlClient.SqlException
            _HResult=-2146232060
            _message=不能将值 NULL 插入列 'ID',表 'Ado.dbo.Catalogs';列不允许有 Null 值。INSERT 失败。
语句已终止。
            HResult=-2146232060
            IsTransient=false
            Message=不能将值 NULL 插入列 'ID',表 'Ado.dbo.Catalogs';列不允许有 Null 值。INSERT 失败。
语句已终止。
            Source=.Net SqlClient Data Provider
            ErrorCode=-2146232060
            _doNotReconnect=false

她说小编的ID未有设置值,可是作者设置了。作者想你们一定会感觉是未曾设置标志。也等于机动增进。不是那样子的。作者本来正是未有想过要自行拉长哟。那么为啥会错呢?事实小编也是以那规范的角度去想的。会不会EF暗许就感到ID是活动增加。因为ID是int类型的。又是主键。所以本人就在炫丽配置内部加了一段代码。如下

 public class CatalogsMap : EntityTypeConfiguration<Catalogs>
    {
        public CatalogsMap()
        {
            this.HasKey(t => t.ID);
            this.Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
            this.Property(t => t.CatalogName).HasColumnName("CatalogName");
            this.Property(t => t.CatalogCode).HasColumnName("CatalogCode");
        }
    }

革命部分就是增添的代码。这年就不会出错了。那么那段代码是怎么着意思。便是告诉EF这里的ID只是平常的。未有其余设置。

修改:

using (AomiContext ac = new AomiContext())
{
     Catalogs updateCatalogs = ac.Catalogs.FirstOrDefault(t => t.ID == 4);
     updateCatalogs.CatalogName = "纸类";

     ac.SaveChanges();
}

删除:

using (AomiContext ac = new AomiContext())
{
 Catalogs deleteCatalogs = ac.Catalogs.FirstOrDefault(t => t.ID == 1);
 ac.Catalogs.Remove(deleteCatalogs);

 ac.SaveChanges();
}

小编在做EF的增加和删除改的时候,作者心里面一贯在想俩个难题?

先是:EF并从未像Hibernate那样子。有扩展的章程和更新的章程。他唯有一种概念那就是数量有未有产生更换。依据改换多少来更新数据库的数额。

其次:Hibernate在拍卖对象的时候。会用到对象的二种情状。那三种情形在差异的书里头有例外的叫法。小编一般喜欢叫她们为普通状、持久状、游离状。可是假诺把Hibernate这些知识放在EF那边来的话,也不是说不得以。只是认为这一年有好几怪。EF那边并未看似相关的印证。可是小编还是感觉有不可或缺用她位于EF那边。为啥吧?先让我们看一下动静吗。假诺大家把下边包车型大巴ID产生了标记。即为自动拉长。在加码的时候就向来不须求去设置那几个值。那么扩张成功未来我们要假设去获得对应的ID值呢?难道在得到2回呢?显著不是。如下。

class Program
    {
        static void Main(string[] args)
        {
            using (AomiContext ac = new AomiContext())
            {
                Catalogs catalogs = new Catalogs();
                catalogs.ID = 0;
                catalogs.CatalogName = "商品";
                catalogs.CatalogCode = "s0001";
                ac.Catalogs.Add(catalogs);

                ac.SaveChanges();

                Console.WriteLine("ID:" + catalogs.ID);
            }

            Console.ReadKey();
        }
    }

笔者把上边的数量总体刨除掉。并且把Catalogs表的列ID修改为标志。就是自动增加。在新建Catalogs对象的时候把ID设置为0。然后大家在看一下充实成功之后ID是否照旧为0。可是记得把CatalogsMap类里面包车型客车映照配置修改一下。修改如下。

 this.Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

好了,让我们看一下结实值是多少。如下。大家看来是7。为何不是0。笔者的SQL
Server的标志是从陆初步的。所以那边是柒。如若你们一初步的话。是壹。但决对不是0。为啥?就是因为对象变成了持久状了。

图片 4

普通状:正是正规用关键字new来成立。

持久状:正是通过EF之后,比方扩张。今年对象跟数据库同步。

游离状:关闭EF之后的对象。但是小编以为EF未有那种场馆。因为Hibernate有唤醒那么些作用。

本章总结

本章首要讲到关于Linq和EF的知识点。Linq的有的入门用法和EF的着力知识点。当然,有关EF的类与类之间的涉及和数码迁移作者作者必未有说。希望读者们自行查看。

本章简言
上一章作者对于WinForm开拓进程用到的多少个知识点做了疏解。大家方能够此为开首进行学习。…

上一章小编对于WinForm开垦进度用到的几个知识点做了教授。我们方能够此为伊始实行学习。而本章我们来说1个跟OEscortM思想有关的知识点。在讲以前让大家想转手关于JAVA的hibernate知识点。hibernate也是O途乐M框架。记得hibernate里面有一个叫HQL。先不管HQL的好与坏。首就算掌握HQL的目地是何许。OPRADOM的思考正是为了让用户在操作数据的时候用上边向对象的思维来看,而不是二维数据了。所以HQL作者感到便是一个面向对象观念的SQL语句。那么为啥小编要讲到HQL呢?事实上我感到Linq有几许跟她近乎。就算项目架构是三层的话,正是让业务层的开辟人士不用在看2维数目了。就连SQL语句都以面向对象理念格局来操作了。而EF(Entity
Framework)能够说正是hibernate。就是可以领略为Linq的数据源。不过HQL要在hibernate上面本事有成效。Linq却足以不用EF。

Linq语法

.NET对于Linq知识的归类让小编有时候以为很无力。为啥吗?最早的时候我感觉Linq知识点分叁大块。分别为Linq
to SQL、Linq to Entity、Linq to
Database。随着对Linq使用的增加却开掘还有Linq to Xml 、Linq to
Excel等。作者想读者们是否看看门道来了。可以说.NET在规划Linq的时候,应该是有足够的想过以后扩充的难点。当然那不是本章的对象。笔者在支付进程中最常用的便是Linq
to SQL和 Linq to Entity。其它还有2个叫Linq to Object.对于Linq to
Object小编平昔以为就是Linq to
Entity。笔者的乐趣是指他们的文化该应放在壹块儿。好了。先作者讲一下关于Linq
to SQL。

对此Linq to
SQL来说,只要学习SQL语法的人都不用想念很轻松就上手。记得小编学习的时候,1看本人去不就HQL的另壹种造型呢?当然
HQL可不是Linq依然要学习一下的。讲那么多未有用。用列子才是最棒的。

一、建立EF环境。先建1个门类,然后通过NUGET来获得对应的EF的DLL。对于NUGET是怎么着。相信看过《Java进击C#——项目支付境况》的人应有能够掌握到。采取“引用”右击》管理Nuget程序包。

图片 5

信任看了上边的图样的时候,大家曾经意识了EntityFramework了呢。点击“安装”就能够了。那个时候项目就能够多出3个叫packages.config文件。那之中著录入眼下安装的dll新闻。同时物理目录里面会多出二个文书夹packages来存在那么些dll。

图片 6

我们看看引用里面多出了有关EF的引用dll。今年大家就能够做EF的事务了。

二、新建EF上下文。EF有2个很主要的类。能够说是上学EF的宗旨点。那么些类就是DbContext。小编新建一类叫AomiContext承继他。如下

public class AomiContext : DbContext
{

}

DbContext类有多少个构造函数。作者这里讲三个常用的吗。如下

 public DbContext(string nameOrConnectionString);

正是个构造函数意思正是传二个连接字符串或是配置文件的连天字符的配置名。记得上一节中讲的App.config了吧。没错正是要用到她。看一下我写的始末吧。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="aomi" connectionString="Data Source=.;Initial Catalog=Ado;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

地点的connectionStrings部分是我本身写的。其余是自动生成的。.NET自身有三个布置连接字符串的节点。大家就是在这几个节点上写入本人的连年就能够了。

<add name="aomi" connectionString="Data Source=.;Initial Catalog=Ado;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>

好了。接下来正是把AomiContext类修改一下。让她跟对应的连天字符串的安插爆发关系。如下

 public class AomiContext : DbContext
    {
        public AomiContext()
            : base("Aomi")
        { }
    }

见到深橙部分的代码了啊。把Aomi正是对应上边配置add节点的name的值。那一年EF会本人去布置文件之中去找。

3、建设构造表和类的映射。

对应数据库的表:

CREATE TABLE [dbo].[Catalogs](
    [ID] [int] NOT NULL,
    [CatalogName] [nvarchar](50) NULL,
    [CatalogCode] [nvarchar](50) NULL,
 CONSTRAINT [PK_Catalogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

对应数据库的数目

INSERT [dbo].[Catalogs] ([ID], [CatalogName], [CatalogCode]) VALUES (1, N'小吃', N'c0001')
INSERT [dbo].[Catalogs] ([ID], [CatalogName], [CatalogCode]) VALUES (2, N'计算机', N'c0002')

小编建贰个类用于跟数据Curry面包车型地铁表相对应。今年要记得属性要跟表里里面包车型地铁列名同样子才行。代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqExample
{
    public class Catalogs
    {
        public int ID { set; get; }

        public string CatalogName { set; get; }

        public string CatalogCode { set; get; }
    }
}

有了对应的类之后,还1贰分。大家还要修改一下AomiContext类。那样子就足以经过AomiContext类来访问对应的类对象了。就是数据了。如下

    public class AomiContext : DbContext
    {
        public AomiContext()
            : base("Aomi")
        { }

        public IDbSet<Catalogs> Catalogs { set; get; }
    }

四、执行EF。

 class Program
    {
        static void Main(string[] args)
        {
            using (AomiContext ac = new AomiContext())
            {
                IQueryable<Catalogs> queryable = from c in ac.Catalogs select c;
                List<Catalogs> catalogList = queryable.ToList();

                foreach (Catalogs catalog in catalogList)
                {
                    Console.WriteLine(string.Format("ID:{0} CatalogName:{1}", catalog.ID, catalog.CatalogName));
                }
            }

            Console.ReadKey();
        }
    }

实行结果:

图片 7

从地方的例证我们能够见到用了from c in ac.Catalogs select
c;来获得对应的数码。那就是linq to
sql。简章讲她是贰个面向对象的SQL语句。SQL语句是以select起首,结尾不明确。而linq
to
sql一般是以from开头,以select结尾。表示从哪一个数据源初阶,最后要以什么体统重回。可是大家能够观望她回来是1个IQueryable<T>类型。事实这年他并未去执行得到多少。能够解理为她后天只是去组装SQL语句。只到queryable.ToList();才是去实施得到数量。为了求学上的福利小编又加多少个基本点字让大家看一下。

using (AomiContext ac = new AomiContext())
            {
                IQueryable<Catalogs> queryable = from c in ac.Catalogs where c.CatalogName.Contains("吃") orderby c.CatalogCode ascending select c;
                List<Catalogs> catalogList = queryable.ToList();

                foreach (Catalogs catalog in catalogList)
                {
                    Console.WriteLine(string.Format("ID:{0} CatalogName:{1}", catalog.ID, catalog.CatalogName));
                }
            }

看完了linq to sql之后,让自己看一下有关linq to
entity又是何等东东啊?不过如此子讲linq的语法都相似。只是用法和写法区别样子而以。把地方的例证变壹变吗。

 using (AomiContext ac = new AomiContext())
            {
                //IQueryable<Catalogs> queryable = from c in ac.Catalogs where c.CatalogName.Contains("吃") orderby c.CatalogCode ascending select c;
                IQueryable<Catalogs> queryable = ac.Catalogs.Where(t => t.CatalogName.Contains("吃")).OrderBy(t => t.CatalogCode).Select(c=> c);
                List<Catalogs> catalogList = queryable.ToList();
                foreach (Catalogs catalog in catalogList)
                {
                    Console.WriteLine(string.Format("ID:{0} CatalogName:{1}", catalog.ID, catalog.CatalogName));
                }
            }

来看作者不用多说也明白。正是形成了对应的基本点字方法而以。没错。正是这样子。那年作者就足以那样子感觉随意是Linq to
entity依然Linq to
sql都不可能不要有照望的数据源。这里EF正是为他们提供数据源的。他们俩个照拂都以回来IQueryable<T>类型。只是Linq
to entity是用艺术。而Linq to sql更多像SQL语句。

好了。让我们看一下有关linq to object吧。能够如此了讲啊——不管是Linq to
sql照旧linq to entity他们俩个都离不开linq to object。linq to
object是专对内部存款和储蓄器中的数据开始展览管理。我们能够阅览上边例子中有出现壹段queryable.ToList()。假若小编说ToList()是linq
to object会不会有人喷笔者。为啥作者说她是linq to
object呢?首假使ToList()是对此IEnumerable<T>进行静态扩充的。IEnumerable<T>一般都以用来数组和聚合。位于内部存款和储蓄器中的。而地方都以专对于IQueryable<T>类型的。好了。假若您其实认为小编分的歇斯底里的话,那就是毫无分了。都为Linq语法就行了。linq还提供了部分比较常用的办法。

First:再次来到第三个数据。没有多少就出生格外。同时也得以流传第三个数据的原则作为参数。如queryable.First(t
=> t.CatalogName.Contains(“吃”));。

FirstOrDefault:一样子重回第3个数据,未有数据以来,就再次来到NULL。同时也足以流传第叁个数据的规范作为参数。

Last:同理获得最终一方法。用法同上同样子。

LastOrDefault:同上同样子。跟FirstOrDefault用法一样子。

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图