Linq的好处非常明显,不仅把数据库访问层真正做到面向对象,而且也可以把系统的权限封装到数据库访问层去了。
微软目前稳定的Linq框架是Entity Framework 6.1,我自己编写了一个数据库工具Mr.E,可以用来设计数据库结构,并且把数据库结构编译成Entity Framework的对象,可以说是自动化的code first模式。
Mr.E运行于.Net 4.5版本,大概功能如下:
1.网络版本,支持多人同时设计数据库;
2.目前支持Sql Server、MySql、Sqlite数据库;
3.支持数据库结构更新;
---你的项目发布后,如果再修改数据库结构,可以使用Mr.E,对已经发布的数据库进行结构的更新。
4.支持数据库类型变更;
---比如原来是Sql Server数据库,可以在开发中途变更为MySql数据库,而不需要变更代码。
5.支持一个数据库结构,多个数据库类型;
---比如你的项目,它分为网络版和单机版,网络版使用Sql Server数据库,单机版使用Sqlite数据库,那么你可以一直以Sql Server类型进行数据库结构设计,到发布的时候,把结构更新到另一个sqlite数据库上即可。
6.关闭EF的数据跟踪,提高性能
7.支持类似触发器的代码,通过代码,可以捕捉全局数据表的insert update delete事件;
---这样,相当于可以用c#去写触发器了
8.支持定义索引
9.支持级联删除,级联删除的数据同样支持7里面的特性
需要Mr.E源码的朋友可以加我qq索取。(896872647)
安装步骤:
1.配置Mr.E的IIS服务站点
点击下载ECWeb.rar文件,解压后,在IIS创建一个网站执行它,端口可以任意定义,例如:666,应用池必须是.Net 4.5或以上版本
2.下载客户端
下载Mr.E.rar文件,解压后,直接运行EJClient.exe,弹出登录窗口,输入上一步iis里面配置的网站路径,用户名默认:sa,密码是:1
3.创建数据库
首先,需要新建一个工程,点击菜单【project】,新建一个工程
然后,展开新建的project,在Databases点击右键,新建一个数据库
注意:如果是sqlite类型数据库,如上图,数据库放在F:\SqliteLinqTest,那么必须确认IIS有读写F:\SqliteLinqTest文件夹的权限,否则无法创建
3.创建数据表
先在【数据模块】那里点击右键,添加一个目录,然后在目录下面添加一个模块
----->
然后双击“基本信息”模块,在它的区域里面去添加数据表。这样子,数据表就可以分类管理,不像sql server那样,所有表都列在一起
--->
4.编译数据库,生成dll文件
右键点击TestDB->【编译】,生成它的dll文件。
5.在代码中访问数据库
新建一个.Net工程,引用EntityDB.dll、EntityFramework.dll、刚才生成的TestDBDataObjects.dll、.Net自带的System.Data.Linq
项目编译后,需要把EntityDB.rar里面所有dll,包括x86 x64文件夹都拷贝到运行目录,bin\Debug下面,那些都是运行时所需要的
下面是C#访问数据库的代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace LinqTest1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { using (var db = new Test.DB.TestDB(@"data source=""F:\SqliteLinqTest\TestDB""", EntityDB.DatabaseType.Sqlite)) { //开始事务 db.BeginTransaction(); try { //添加数据 var user = new Test.UserInfo(); user.UserName = "张三"; user.Password = "123"; db.Update(user); Debug.WriteLine("张三的id是" + user.id); //更新数据 var zhangSan = (from m in db.UserInfo where m.UserName == "张三" select m).FirstOrDefault(); zhangSan.Password = "678"; db.Update(zhangSan); //删除数据 var data = db.UserInfo.FirstOrDefault(m => m.UserName == "李四"); if (data != null) { db.Delete(data); } //提交事务 db.CommitTransaction(); } catch { //回滚事务 db.RollbackTransaction(); throw; } } } } }
从代码中可以看到,因为我关闭了EF的数据跟踪,所以,数据的 insert update delete等,需要调用db.Update() db.Delete()去实现,不能用EF自带那种方式去做