EntityFramework教程详解

EntityFramework教程详解
应用程序对数据库执行CRUD时,通过entity framework方式,实际上是对DbContext的操作,DbContext是EF的入口,DbContext拿到对应的消息(CRUD)后,通过ORM中的Mapping来将对象O映射成数据库中的关系R。
EntityFramework中进行修改、删除、增加数据,都需要将要操作的数据先添加到“上下文”中,并修改上下文的状态,最后调用SaveChange这个方法。而查询可以利用Linq语句查询或者利用lambda表达式去查询。

增加对象

DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否可空) 
var user = new User { Name = "bomo", Age = 21, Gender = "male" }; 
db.User.Add(user); 
db.SaveChanges();
var entity = Mapper.Map<CreateServerInDto, SysServer>(model);
entity.ServerId = DbHepler.GenerateNewId();
db.SysServers.Add(entity);
db.SaveChanges();

删除对象,删除只需要对象的主键

DbEntity db = new DbEntity();
 //删除只需要主键,这里删除主键为5的行
 var user = new User {Id = 5};

//将实体附加到对象管理器中
 db.User.Attach(user);
//方法一:
 db.User.Remove(user);
//方法二:把当前实体的状态改为删除
//db.Entry(user).State = EntityState.Deleted;
db.SaveChanges();

var entity = db.SysServers.FirstOrDefault(p => p.ServerId == serverId);
if (entity == null)
    return GetErrorMsgByErrCode(20101005);

db.SysServers.Remove(entity);
db.SaveChanges();

修改对象

方法一

DbEntity db = new DbEntity();
 //修改需要对主键赋值,注意:这里需要对所有字段赋值,没有赋值的字段会用NULL更新到数据库
 var user = new User
{
       Id = 5,
       Name = "bomo",
       Age = 21,
       Gender = "male"
 };
//将实体附加到对象管理器中
db.User.Attach(user);
//把当前实体的状态改为Modified
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
var entity = Mapper.Map<UpdateServerInDto, SysServer>(model);
db.SysServers.Attach(entity);
db.Entry(entity).State = EntityState.Modified;
db.SaveChanges();

方法二:方法一中每次都需要对所有字段进行修改,效率低,而且麻烦,下面介绍修改部分字段

DbEntity db = new DbEntity();
//修改需要对主键赋值,注意:这里需要对所有字段赋值,没有赋值的字段会用NULL更新到数据库
var user = new User
{
    Id = 5,
    Name = "bomo",
    Age = 21
};
//将实体附加到对象管理器中
db.User.Attach(user);

//获取到user的状态实体,可以修改其状态
var setEntry = ((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.GetObjectStateEntry(user);
//只修改实体的Name属性和Age属性
setEntry.SetModifiedProperty("Name");
setEntry.SetModifiedProperty("Age");

db.SaveChanges();

使用事务

使用事务很简单,只要把需要的操作放在 TransactionScope 中,最后提交

DbEntity db = new DbEntity();
using (var scope = new TransactionScope())
{
//执行多个操作
var user1 = new User
{
    Name = "bomo",
    Age = 21,
    Gender = "male"
};
db.User.Add(user1);
db.SaveChanges();

var user2 = new User
{
    Name = "toroto",
    Age = 20,
    Gender = "female"
};
db.User.Add(user2);
db.SaveChanges();

//提交事务
scope.Complete();
}

查询:查询通过LinQ查询

DbEntity db = new DbEntity();
//选择部分字段
var user = db.User.Where(u => u.Name == "bomo").Select(u => new {Id = u.Id, Name = u.Name, Age = u.Age}).FirstOrDefault();
//只有调用了FirstOrDefault, First, Single, ToList, ToArray等函数才会执行对数据库的查询

扩展阅读

    原文作者:Bobby0322
    原文地址: https://www.jianshu.com/p/8693c3549b20
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞