【发布时间】:2017-07-11 23:27:41
【问题描述】:
假设我有一个通用的数据访问层方法来更新记录,代码如下:
public virtual void Update<P>(Expression<Func<T, P>> excludeColumn, params T[] items)
{
foreach (T item in items)
{
_entities.Entry(item).State = EntityState.Modified;
_entities.Entry(item).Property(excludeColumn).IsModified = false;
}
_entities.SaveChanges();
}
这里我使用excludeColumn 参数来排除更新中的列,我像这样将值传递给这个参数
_companyProfileRepository.Update(x => x.EmailAddress, records);
x => x.EmailAddress 是我传递给通用Update 方法的表达式。我的问题是我想将多列传递给Update 方法,因为有时我需要排除不止一列,但我的方法不支持多列机制。
谁能帮我解决这个问题?
【问题讨论】:
-
我的理解是 EF 已经跟踪你的实体的变化并且只更新修改后的属性,那你为什么需要排除列呢?
-
因为我发送的是空属性进行更新,即使数据库中有一个值,这样做是因为这是敏感数据,我不想在视图中显示它,但用户可以更新其他值
-
您可能需要考虑在实体和视图之间添加一个层,例如视图模型 - 请参阅此问题:stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc。
标签: c# entity-framework generics lambda