相关疑难解决方法(0)

实体框架5更新记录

我一直在探索在ASP.NET MVC3环境中编辑/更新实体框架5中的记录的不同方法,但到目前为止,它们都没有勾选我需要的所有框.我会解释原因.

我找到了三种方法,我将提到它的优点和缺点:

方法1 - 加载原始记录,更新每个属性

var original = db.Users.Find(updatedUser.UserId);

if (original != null)
{
    original.BusinessEntityId = updatedUser.BusinessEntityId;
    original.Email = updatedUser.Email;
    original.EmployeeId = updatedUser.EmployeeId;
    original.Forename = updatedUser.Forename;
    original.Surname = updatedUser.Surname;
    original.Telephone = updatedUser.Telephone;
    original.Title = updatedUser.Title;
    original.Fax = updatedUser.Fax;
    original.ASPNetUserId = updatedUser.ASPNetUserId;
    db.SaveChanges();
}    
Run Code Online (Sandbox Code Playgroud)

优点

  • 可以指定更改哪些属性
  • 视图不需要包含每个属性

缺点

  • 在数据库上进行2次查询以加载原始数据然后更新它

方法2 - 加载原始记录,设置更改的值

var original = db.Users.Find(updatedUser.UserId);

if (original != null)
{
    db.Entry(original).CurrentValues.SetValues(updatedUser);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

优点

  • 仅将已修改的属性发送到数据库

缺点

  • 视图需要包含每个属性
  • 在数据库上进行2次查询以加载原始数据然后更新它

方法3 - 附加更新的记录并将状态设置为EntityState.Modified

db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

优点

  • 1 x查询数据库以进行更新 …

c# asp.net-mvc-3 entity-framework-5

856
推荐指数
5
解决办法
43万
查看次数

具有部分更新的实体框架验证

我正在使用Entity Framework 5.0与DbContext和POCO实体.有一个包含3个属性的简单实体:

public class Record
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Title字段始终未修改,UI只显示它而不提供任何输入框来修改它.这就是将表单Title设置为null将表单发送到服务器的原因.

以下是我告诉EF执行实体的部分更新的方法(IsActive仅限字段):

public class EFRepository<TEntity>
{
   ...
   public void PartialUpdate(TEntity entity, params Expression<Func<TEntity, object>>[] propsToUpdate)
   {
       dbSet.Attach(entity);
       var entry = _dbContext.Entry(entity);
       foreach(var prop in propsToUpdate)
           contextEntry.Property(prop).IsModified = true;
   }
}
Run Code Online (Sandbox Code Playgroud)

和电话:

repository.PartialUpdate(updatedRecord, r => r.IsActive);
Run Code Online (Sandbox Code Playgroud)

调用SaveChanges方法,我得到的DbEntityValidationException,告诉我,Title是必需的.当我设置dbContext.Configuration.ValidateOnSaveEnabled = false …

validation entity-framework updates

21
推荐指数
2
解决办法
1万
查看次数