2011-05-24 197 views
8

有谁知道我们是否可以在实体框架4.1代码优先的情况下排除列更新?例如,我有'CreatedOn'字段,我不想在编辑/更新时添加。这是可能的,即有选择地排除EF Code First 4.1中更新操作的字段?从实体框架4.1中更新排除列代码优先

+0

你最终如何解决这个问题?答案只提供建议。 – 2011-05-31 22:18:45

回答

15

如果您使用的是附加实体,则EF只会为已更改的字段生成更新。如果您正在使用分离的实体,则必须手动说出EF发生了什么变化。如果你这样称呼:

context.Entry(yourEntity).State = EntityState.Modified; 

你是在说EF所有的属性都应该被修改。但是,如果你不是叫这个:

context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = true; 

你会说,只有SomeProperty被修改(仅此属性将在更新)。我不确定是否可以通过将整个实体标记为已修改并选择不应该修改的属性来进行反向操作,但是您可以自行测试。

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

+0

有没有办法从select中排除列?我有一个'User'实体,并且我希望按需要选择'Password:varbinary(32)'列,这可能吗? – Shimmy 2012-02-07 01:43:36

+2

反向操作也起作用(至少在我测试过的EF5中)。这意味着您可以先调用'context.Entry(yourEntity).State = EntityState.Modified',然后调用'context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = false'来更新所有除了手动排除的列以外的列。 – 2013-02-28 13:49:57

+0

@FlorinDumitrescu:是的,这在EF5中使用.NET 4.5,但不使用.NET 4.0。 – 2013-02-28 14:16:21

相关问题