我会把代码放在第一位,然后我将解释我想要做的事情:
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;
感谢您的任何建议或想法:)。
答案 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);
}
}