在实体框架代码优先4.1中保存更新的实体,但该实体的单个属性除外

时间:2011-11-08 15:30:08

标签: entity-framework-4.1

我会把代码放在第一位,然后我将解释我想要做的事情:

1 public bool UpdateEntity(Ent myEnt)
2 {
3     int affectedRowsNo = 0;
4     using (Entities dbContext = new Entities())
5     {  
6         dbContext.Ents.Attach(myEnt);
7         dbContext.Entry(myEnt).State = EntityState.Modified;
8         affectedRowsNo = dbContext.SaveChanges();    
9     }
11    if (affectedRowsNo > 0)
12        return true;
13    return false;
14}

此方法保存更新的实体,它工作正常,但我希望此实体的某个属性在db中保持不变。换句话说,我希望该属性不会保存在dbContext.SaveChanges();

我试过这个并且它没有用(在第7行之后的代码中插入):

dbContext.Entry(myEnt).Property(e => e.ExceptedProperty).EntityEntry.State = EntityState.Unchanged;

感谢您的任何建议或想法:)。

2 个答案:

答案 0 :(得分:0)

我会这样做:

using (Entities dbContext = new Entities())
{  
    var entInDb = dbContext.Ents.Single(e => e.Id == myEnt.Id);

    myEnt.ExceptedProperty = entInDb.ExceptedProperty;

    dbContext.Entry(entInDb).CurrentValues.SetValues(myEnt);
    affectedRowsNo = dbContext.SaveChanges();    
}

这里(When updating Marking entity datetime property unchanged)是更多细节和替代方案,但我认为上面的解决方案是最佳方式。

答案 1 :(得分:0)

我会为课程Ent添加

的地图
this.Property(z => z.ExceptedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

ExceptedProperty的任何更新都将被忽略

例如

public class Context : DbContext
{
    static Context()
    {
        Database.SetInitializer<Context>(null);
    }

    public DbSet<Ent> Ents { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new EntMap());
    }
}

public class EntMap : EntityTypeConfiguration<Ent>
{
    public EntMap()
    {
        this.Property(e => e.ExceptedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    }
}