0

我有几个实体有一个索引字段,我用它来指定显示记录的顺序。这个字段是一个整数,它必须从 1 到 n 没有任何“洞”(不能有 1, 2,4,5)。为了维护索引字段,我需要执行以下操作:

  • 添加时应设置索引字段,以便将新记录放在最后
  • Edit上,如果索引发生变化,则需要更新已编辑记录的旧索引和新索引之间的记录
  • 删除时,索引比被删除的记录更高的记录需要更新

所以,我想知道的是,不是为每个“可排序”的类定义一次这种行为,我可以用更通用的方式来做吗?IE。为实现接口 ISortable 的实体执行这些操作?

这个逻辑应该放在哪里?

提前致谢!

4

1 回答 1

0

您在与 POCO 一起存在的部分类中实现接口(或从抽象基类继承),并将更新集中在Context继承自DbContext或作为装饰器的类中DbContext。您需要实现自己的抽象(例如IUnitOfWork),因为DbContext没有实现任何有用的接口。

这是一个在内部实现的简单示例Context

public override int SaveChanges()
{
    foreach(IAuditData item in GetChangedAuditDataEntities())
    {
        //...... update the entity
    }
    return base.SaveChanges();
}


private IEnumerable<IAuditData> GetChangedAuditDataEntities()
{
    return (
        from entry in ChangeTracker.Entries()
        where entry.State != EntityState.Unchanged
        select entry)
        .OfType<IAuditData>();
}
于 2013-07-01T10:08:25.783 回答