Entity Framework(简称EF)将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象;跟踪对象所做的更改;并发处理;将对象更改传播到数据源等。利用Entity Framework进行查询、插入、更新和删除数据。
在EF中进行查询应该说是相当简单,只需要定义一个类继承于“DbContext”,然后定义对应的“DbSet”集合属性即可。例如下面的“DataContext”类:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//解决SQL表名复数s
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration.Conventions;
//解决SQL表名复数s
namespace CadreApp.Data
{
class DataContext : DbContext
{
/// <summary>
/// 用户表
/// </summary>
public DbSet<User> Users { get; set; }
public DataContext()
: base("CadreDB")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
一个数据库上下文的生命周期随着该对象的创建而开始,随着对象的释放(或GC回收)而结束,因此建议在开发过程中使用“Using”编码方式,这样就可以免去手动释放对象的操作。如下面的代码:
using (var db = new DataContext())
{
var user= db.Users.Where(p => p.Name == "PB2.CN").OrderBy(p=>p.Sort);
foreach(var p in persons)
{
Console.WriteLine("Name:{0},Nickname:{1}", p.Name, p.Nickname);
}
}
EF常用语法:
//查询Models模型数据
var user= db.Users;
参数 | 说明 |
---|
Where() | 条件查询 |
OrderBy() | 升序排序 |
ThenBy() | 多个字段升序排序 |
OrderByDescending() | 降序排序 |
ThenByDescending() | 多个字段降序排序 |
FirstOrDefault() | 只获取第一条记录 |
//直接运行SQL语句
var user = db.Users.SqlQuery("SELECT * FROM Users WHERE Name='PB2.CN'");
//无返回值的SQL命令
db.Database.ExecuteSqlCommand("UPDATE Users SET Nickname='码农E+' WHERE Name='PB2.CN'");
//新增Models模型数据
db.Users.Add(User);
//删除Models模型数据
db.Entry(User).State = EntityState.Deleted;
//更新Models模型数据
db.Entry(User).State = EntityState.Modified;
//执行
db.SaveChanges();