应用程序和数据库采用Tcp协议通讯
ORM框架有: NHibernate ,Dapper ,Mybatis 底层是 ADO.Net
好处:
1.面向对象
2.没有sql减少学习成本,快速开发
3.编译检测会更有用(写sql,字段改了,漏改sql就会异常)
3.有编译检测(改了数据库字段,必须修改,否则报错)?
4.支持延迟特性,缓存
缺陷:
1.sql是自动生成,比较僵化,不确定是否使用索引
2.需要很多反射,对时间和空间有损耗(类,属性,特性)
3.比较复杂的查询不合适,用SQL 或 存储过程, 注意EF查询的性能优化,和SQL性能优化,
大家不要排斥ORM,因为ORM只是一个工具,虽然不能帮你把所有的事儿都做的尽善尽美,但是它有自己的价值,而且它也可以直接用ado.net的
一张应用程序,ORM,ADO.Net 和数据库的图,还有代码层面的
举一个栗子啊 控制台程序+EF6.几
namespace Ruanmou.EFDBFirst
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("欢迎来到.Net高级班VIP课程,今晚学习EntityFramework"); //context:数据库映射,一定有个数据库连接,一开始实例化是没有任何数据
//查询个数据之后会做个trace(克隆), 然后你修改任何数据,能识别到并且翻译成sql执行;;数据不是查询的,那么需要去指定状态
using (advanced11EntitiesDbContext context = new advanced11EntitiesDbContext())
{
context.Database.Log += c => Console.WriteLine($"sql:{c}");
User user1 = context.Users.Find();//即时查询 查询主键ID=5的用户,艾玛,太神奇了 还有这种操作 。。。
var userList = context.Users.Where(u => u.Id > && u.Name.Length > );//延时
foreach (var item in userList)
{
Console.WriteLine(item.Name);
} user1.Name += "test";
user1.State += ;
context.SaveChanges();//把context全部的变化更新到数据库
User user = context.Users.FirstOrDefault(u => u.Id == );//针对数据库查询
new List<int>().FirstOrDefault(i => i > );//针对内存数据的linq to object User userNew = new User()
{
Account = "Admin",
State = ,
CompanyId = ,
CompanyName = "万达集团",
CreateTime = DateTime.Now,
CreatorId = ,
Email = "57265177@qq.com",
LastLoginTime = null,
LastModifierId = ,
LastModifyTime = DateTime.Now,
Mobile = "",
Name = "yoyo",
Password = "",
UserType =
};
context.Users.Add(userNew);
context.SaveChanges();//自增主键在插入成功后,会自动赋值过去
context.Users.Remove(userNew);
context.SaveChanges();//本身就是一个事务
} }
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
}
监视执行SQL,贴下图
以后还能不能愉快的写SQL了。。。
删除比修改费时,还是用软删除好了