存储库模式更新实体并设置独占属性

时间:2016-01-08 16:25:00

标签: c# repository-pattern unit-of-work

我使用通用存储库模式和工作单元。我正在更新记录,我有一列存储记录的状态,而且它不是来自视图本身。因此,当我更新记录时,我想从存储库中设置该值,但我无法获取实体的属性。这是我更新记录的示例代码。 T有isDeleted属性并且它为null,但我想在这里设置该值。 我怎么能这样做?

public void QuickUpdate(T original, T updated)
{
    _dbSet.Attach(original);
    _context.Entry(original)
                .CurrentValues
                .SetValues(updated);
    _context.Entry(original).State = EntityState.Modified;
}

2 个答案:

答案 0 :(得分:0)

我不知道你的对象模型,但我做的是最简单的例子。我们假设您的RecordT类型,密钥为Id属性。

public void QuickUpdate(Record original)
{
    Record updatedRecord = _dbSet.Records.FirstOrDefault(r => r.Id == original.Id);
    updateRecord.IsDeleted = true;
    _dbSet.SaveChanges();
}

我并不完全关注originalupdated如何一起玩的问题,但在实体上设置单个属性就像那样简单。

答案 1 :(得分:0)

这是答案。 - 更新。

var originalStatus = original.GetType().GetProperty("isDeleted").GetValue(original);
updated.GetType().GetProperty("isDeleted").SetValue(original, true);

_dbSet.Attach(original);
_context.Entry(original)
            .CurrentValues
            .SetValues(updated);
_context.Entry(original).State = EntityState.Modified;