排除列在Entity Framework 4.1 Code First中可更新

Bik*_*Lem 8 ef-code-first entity-framework-4.1

有谁知道我们是否可以排除在Entity Framework 4.1 Code First中更新列?例如,我有'CreatedOn'字段,我不希望在进行编辑/更新时包含该字段.这是否可行,即选择性地从EF Code First 4.1中的更新操作中排除字段?

Lad*_*nka 15

如果您正在使用附加实体,则EF将仅为已更改的字段生成更新.如果您正在使用分离的实体,则必须手动说出已更改的EF.如果你这样称呼:

context.Entry(yourEntity).State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)

你是说EF修改所有属性.但如果你改为这样称呼:

context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = true;
Run Code Online (Sandbox Code Playgroud)

你会说只有SomeProperty被修改(只有这个属性会被更新).我不确定你是否可以通过将整个实体标记为已修改并选择不应修改的属性来执行相反的操作,但您可以自己测试它.

如果您CreatedOn填写了数据库,则可以将其标记为,DatabaseGeneratedOption.Identity并且您的应用程序永远不会修改它.

  • 反向操作也起作用(至少在我测试过的EF5中).这意味着你可以先调用`context.Entry(yourEntity).State = EntityState.Modified`然后调用`context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = false`以便更新全部列除了手动排除的列. (2认同)