Entity Framework 6.1 Updating a Subset of a Record

前端 未结 3 1381
暖寄归人
暖寄归人 2021-02-19 02:06

I have a view model that encapsulates only some of the database model properties. These properties contained by the view model are the only properties I want to update

3条回答
  •  暗喜
    暗喜 (楼主)
    2021-02-19 02:40

    It is the validation that is causing it not to be saved. You can disable validation with context.Configuration.ValidateOnSaveEnabled = false; and it will work. To validate specific fields you can call var error = entry.Property(e => e.Name).GetValidationErrors();. So you certainly can make an 'UpdateNameAndAge' method that only only enforces business rules and flags those properties as modified. No double query required.

      private static bool UpdateNameAndAge(int id, string name, int age)
      {
         bool success = false;
    
         var context = new PersonContext();
         context.Configuration.ValidateOnSaveEnabled = false;
    
         var person = new Person() {Id = id, Name = name, Age = age};
         context.Persons.Attach(person);
         var entry = context.Entry(person);
    
         // validate the two fields
         var errorsName = entry.Property(e => e.Name).GetValidationErrors();
         var errorsAge = entry.Property(e => e.Age).GetValidationErrors();
    
         // save if validation was good
         if (!errorsName.Any() && !errorsAge.Any())
         {
            entry.Property(e => e.Name).IsModified = true;
            entry.Property(e => e.Age).IsModified = true;
    
            if (context.SaveChanges() > 0)
            {
               success = true;
            }
         }
    
         return success;
      }
    

提交回复
热议问题