JAVA开发的人员对面相对象应该非常熟悉,C#也一样,为什么今天讲EF我要先说JAVA呢?因为C#同JAVA一样,都是面相对象的开发语言,因为JAVA较早,并且JAVA开源,所以JAVA当中的框架较多,所以我们拿JAVA来举例子,在JAVA当中,为了实现数据的面相对象开发,出现了间接实现方式ORM,ORM就是对象关系映射,这方面的框架有很多,比如hibernate,mybatis,openipa等很多成熟的框架,那么在C#当中是不是也存在这样一个框架呢?答案是肯定的那就是ENTITY FRAMEWORK,这个框架实现了在C#中通过ORM的方式来对对象进行相应的增,删,改,查。
一般ORM架构无非是面向对象方式进行增,删,改,查,以及原始的复杂SQL执行,EF这两种方式都满足,下面我们就来详细说一下这两种编程方式。这两种方式都需要DBContext类,第一种很简单,稍后看代码就可以。我们主要说说第二种。
原始SQL执行主要需要两个类:
1.Database.SqlQuery
2.Database.ExecuteSqlCommand
这两个类,上面的主要是执行查询语句,下面的执行DDL和DML,是不是很清楚,接下来通过一些代码会理解起来更直观。
using Oracle.DataAccess.Client;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Objects;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFDemo
{
class Program
{
public static void Main(string[] args)
{
EFDemoContext _context = new EFDemoContext();
T_BD_ORGUSER _user = new T_BD_ORGUSER();
//新增
_user.FUSERID = 101001;
_user.FUSERNAME = "地主老财";
_user.FAGE = 20;
_context.T_BD_ORGUSER.Add(_user);
_context.SaveChanges();
//修改
_user = _context.T_BD_ORGUSER.Where(s => s.FUSERID == 123456).First<T_BD_ORGUSER>();
_user.FAGE = 30;
_context.Entry<T_BD_ORGUSER>(_user).State = System.Data.EntityState.Modified;
_context.SaveChanges();
//删除
_user = _context.T_BD_ORGUSER.Where(s => s.FUSERID == 123456).First<T_BD_ORGUSER>();
_context.Entry<T_BD_ORGUSER>(_user).State = System.Data.EntityState.Deleted;
_context.SaveChanges();
//使用原始SQL语句查询
_user = _context.T_BD_ORGUSER.SqlQuery("select * from t_bd_orguser t where t.fuserid=123456").First<T_BD_ORGUSER>();
List<T_BD_ORGUSER> _lis_obj = new List<T_BD_ORGUSER>();
_lis_obj=_context.Database.SqlQuery<T_BD_ORGUSER>("select * from t_bd_orguser t where t.fuserid=123456").ToList<T_BD_ORGUSER>();
foreach (T_BD_ORGUSER aaa in _lis_obj)
{
System.Console.WriteLine(aaa.FUSERNAME);
}
//使用原始SQL语句执行更新
StringBuilder sql_obj = new StringBuilder();
sql_obj.AppendFormat("update t_bd_orguser t set t.fage=36 where t.fuserid={0}",123456);
var aa = _context.Database.ExecuteSqlCommand(sql_obj.ToString());
System.Console.WriteLine(aa);
}
}
}
每天更新一点新知识,知识不是瞬间学会的,而是日积月累形成的,短期学会的是知道,长期积累的是知识。