本章简言
上一章笔者对于WinForm开发过程用到的几个知识点做了讲解。笔者们可以以此为开端进行学习。而本章我们来讲一个跟ORM思想有关的知识点。在讲之前让我们想一下关于JAVA的hibernate知识点。hibernate也是ORM框架。记得hibernate里面有一个叫HQL。先不管HQL的好与坏。主要是明白HQL的目地是什么。ORM的思想就是为了让用户在操作数据的时候用上面向对象的思想来看,而不是二维数据了。所以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的另一种形态吗?当然 HQL可不是Linq还是要学习一下的。讲那么多没有用。用列子才是最好的。
一、建立EF环境。先建一个项目,然后通过NUGET来获得对应的EF的DLL。对于NUGET是什么。相信看过《Java进击C#——项目开发环境》的人应该可以了解到。选择“引用”右击》管理Nuget程序包。
相信看了上面的图片的时候,我们已经发现了EntityFramework了吧。点击“安装”就可以了。这个时候项目就会多出一个叫packages.config文件。这里面记录着当前安装的dll信息。同时物理目录里面会多出一个文件夹packages来存在这些dll。
我们看到引用里面多出了关于EF的引用dll。这个时候我们就可以做EF的事情了。
二、新建EF上下文。EF有一个很重要的类。可以说是学习EF的核心点。这个类就是DbContext。笔者新建一类叫AomiContext继承他。如下
public classAomiContext : DbContext
{
}
DbContext类有几个构造函数。笔者这里讲一个常用的吧。如下
public DbContext(string nameOrConnectionString);
就是个构造函数意思就是传一个连接字符串或是配置文件的连接字符的配置名。记得上一节中讲的App.config了吧。没有错就是要用到他。看一下笔者写的内容吧。
上面的connectionStrings部分是笔者自己写的。其他是自动生成的。.NET自己有一个配置连接字符串的节点。我们就是在这个节点上写入自己的连接就可以了。
好了。接下来就是把AomiContext类修改一下。让他跟对应的连接字符串的配置发生关系。如下
public classAomiContext : 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 [PRIMA