ORM框架EF的基本使用

介绍

EF是微软基于ADO.NET开发的ORM框架。

ORM对象关系映射,是将实体对象与数据库数据进行映射。这样不需要写sql,仅仅对实体对象进行修改就可以改变数据库数据。

使用

引用

这个visual studio集成,可以手动添加实体模型
在这里插入图片描述

增删改查

查询

	
            //方法一 Linq to Entities
            var info = from p in db.dat_online_sh where p.KeyId != "" orderby p.KeyId descending select p;
            foreach (var item in info)
            {
               
            }

            // 方法二:Lamada表达式
            var info2 = db.dat_online_sh.Where<dat_online_sh>(p => p.KeyId != "").OrderByDescending(p => p.KeyId);
            foreach (var item in info)
            {
     
            }

            // 方法三:db SQL Language
            string strSQL = "SELECT value a FROM dat_online_sh as a WHERE a.KeyId!='' ORDER BY a.ID DESC";
            var info3 = ((IObjectContextAdapter)db).ObjectContext.CreateQuery<dat_online_sh>(strSQL);
            foreach (var item in info)
            {
              
            }

            // 方法四:SqlQuery
            try
            {
                string strSQL2 = "SELECT * FROM dat_online_sh WHERE KeyId!='' ORDER BY KeyId DESC";
                var info4 = db.Database.SqlQuery<dat_online_sh>(strSQL2);
                foreach (var item in info)
                {
               
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
  

				//单条
  				Region region = new Region();
                region.RegionID = 5;
                region.RegionDescription = "青岛";
                db.Region.Add(region);
                db.SaveChanges();

				//多条
				List<Region> regions = new List<Region>();
                regions.Add(new Region { RegionID = 6, RegionDescription = "济南" });
                regions.Add(new Region { RegionID = 7, RegionDescription = "合肥" });
                regions.Add(new Region { RegionID = 8, RegionDescription = "天津" });
                db.Region.AddRange(regions);
                Response.Write(db.SaveChanges());
                
                 for (int i = 10; i < 20; i++)
                {
                    Region region = new Region();
                    region.RegionID = i;
                    region.RegionDescription = $"第{i}条";
                    db.Region.Add(region);
                }
                Response.Write(db.SaveChanges());

//用Remove()方法时,必须先从EF中查到才能删除
UserInfo user = from u in context.UserInfo where u.Id=343 select u;
context.UserInfo.Remove(user);

 


// 用这种方法不用先查再删除,其实内部做了查询,推荐用这种;
UserInfo user = new UserInfo(){Id=343};
context.Entry<UserInfo>(user).State = System.Data.EntityState.Deleted;

//先New一个实体对象,加入需要修改的属性,加入主键值
CompanyAddr DefaultData = new CompanyAddr
{
	id = 1,
    IsDefault = true //需要修改的值
};

//方法一:实体对象所有属性均有赋值,或者不赋值但存在默认值的,结果将会修改为默认值,或者为null
db..Entry<CompanyAddr>(DefaultData).State = System.Data.EntityState.Modified;

//方法二:实体对象部分属性均赋值
//添加到EF管理容器中,并获取 实体对象 的伪包装类对象
DbEntityEntry<CompanyAddr> entry = db.Entry<CompanyAddr>(DefaultData);
//如果使用 Entry 附加 实体对象到数据容器中,则需要手动 设置 实体包装类的对象 的 状态为 Unchanged**
entry.State = EntityState.Unchanged;    
//标识 实体对象 某些属性 已经被修改了
entry.Property("IsDefault").IsModified = true;

//方法三:
//直接针对属性进行状态设置,但是当前对象并没有被上下文跟踪
contextState.Set<CustomerInfo>().Attach(customerState);
//标识 实体对象 某些属性 已经被修改了
contextState.Entry<CustomerInfo>(customerState).Property("customerName").IsModified = true;

//关键性的注意点来了,这里针对的是方法二、三!
//关闭验证实体有效性(ValidateOnSaveEnabled)这个开关
//因为New的一个新实体对象,里面肯定很多值不会修改,而默认是空的情况;
//再进行SaveChanges的时候,会进行实体验证,这个时候就会出错
//当然,如果是你需要修改的数据输入值真的有问题,也是不能修改成功的,例如上面的IsDefault 不赋值为未布尔型,还是会报错的
db.Configuration.ValidateOnSaveEnabled = false;

db.SaveChanges();

//恢复验证实体有效性(ValidateOnSaveEnabled)这个开关【如果后续有其他操作,记得恢复】
db.Configuration.ValidateOnSaveEnabled = true;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值