EntityFramework是一个很不错的ORM框架,一直都在使用。今天想跟大家分享以下EntityFramework数据更新方面的几个技巧:
 1:如何new一个新实体去更新记录,而不是从数据库中查询一条记录来更新。
 2:如何在更新实体的同时,对导航属性的实体进行一系列的操作。
 3:如何用最简单的代码实现实体的部分更新。

new一个新实体去更新记录

EntityFramework有一个特点,你无须查询出一个记录,而是new一个新实体,然后对其进行删除或更新操作,只须提供实体的ID即可,如果ID不存在将会抛出异常。这样有助于提高性能,毕竟减少了一次数据库访问。要实现用一个新实体去更新记录,你得让EF的Change Tracker跟踪该实体,让它认为该实体就是从数据库中取出来的,只要让改该实体处于修改状态就行了,代码如下:

1  context.Entry<TEntity>(entity).State = EntityState.Modified;
2  context.SaveChanges();

2 更新实体时操作导航属性
用一个例子来说明在更新实体同时如何对导航属性进行操作吧。假设有两个类型
  public class Customer
    {
        public string ID { get; set; }
        public string Name { get; set; }       
        public IList<CustomerAddress> CustomerAddresses { get; set; }
    }

  public  class CustomerAddress
    {
       public string City { get; set; }     
       public string ZipCode { get; set; }
       public string CustomerId { get; set; }    
       public Customer Customer { get; set; }
    }
那如何在更新Customer的同时Add一个CustomerAddress并且Delete一个CustomerAddress呢?关键一点就是要让EntityFramework的Change Tracker知道有CustomerAddress的存在,只需对Customer增加一个Add操作就行了,代码如下:

 1 public void Modify(Customer entity,CustomerAddress address)
 2         {
 3             context.Customer.Add(entity);
 4 
 5             //修改Customer
 6             context.Entry(entity).State = EntityState.Modified;
 7 
 8             //新增CustomerAddress
 9             if (......)
10             {
11                 entity.CustomerAdresses.Add(address);
12             }
13             
14             //删除CustomerAddress
15             if (.......)
16             {
17                 context.Entry(address).State = EntityState.Deleted;
18             }
19             context.SaveChanges();
20         }
View Code

相关文章:

  • 2021-12-09
  • 2021-06-06
  • 2021-06-28
  • 2021-08-20
猜你喜欢
  • 2021-12-31
  • 2021-09-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-15
  • 2021-06-21
相关资源
相似解决方案