EntityFramework update partial model

前端 未结 2 1149
无人共我
无人共我 2020-12-13 15:46

I am working on mvc project, with repository pattern and entity framework, now on my form i have a sample model

SampleModel
1) name
2) age
3) address

相关标签:
2条回答
  • 2020-12-13 16:09

    This is an old thread, but if anyone is interested, to extend on Ladislav's solutions, we've come up with a helpful extension method for EF 4.1 and newer:

    public static void SetModified<TEntity>(
            this DbEntityEntry<TEntity> entry,
            IEnumerable<Expression<Func<TEntity, object>>> expressions) where TEntity : class, IEntity
        {
            foreach (var expression in expressions)
                entry.Property(expression).IsModified = true;
        }
    

    Obviously you'll need to take away the IEntity constraint unless you're using an interface by the same name for your POCOs.

    Example usage would be:

            var user = new User
            {
                Id = Request.Id,
                UserName = Request.UserName,
                FirstName = Request.FirstName
            };
    
            var expressions = new List<Expression<Func<User, object>>> 
                     { 
                         x => x.UserName, 
                         x => x.FirstName
                     };
    
            context.Entry(user).SetModified(expressions);
    
    0 讨论(0)
  • 2020-12-13 16:13

    You can update only subset of fields:

    using (var context = new YourDbContext())
    {
        context.SamepleModels.Attach(sampleModel);
    
        DbEntityEntry<SameplModel> entry = context.Entry(sampleModel);
        entry.Property(e => e.Name).IsModified = true;
        entry.Property(e => e.Age).IsModified = true;
        entry.Property(e => e.Address).IsModified = true;   
    
        context.SaveChanges();
    }
    

    or in ObjectContext API:

    using (var context = new YourObjectContext())
    {
        context.SamepleModels.Attach(sampleModel);
    
        ObjectStateEntry entry = context.ObjectStateManager.GetObjectStateEntry(sampleModel);
        entry.SetModifiedProperty("Name");
        entry.SetModifiedProperty("Age");
        entry.SetModifiedProperty("Address"); 
    
        context.SaveChanges();
    }
    
    0 讨论(0)
提交回复
热议问题