0

在我使用 EntityFramework 的 .NET MVC Web API 项目中,我有这些模型;StoreCourse。我在 DbContext 中覆盖 SaveChanges() 以version在每次更新时增加一个属性。

我想做的是,当我更新course对象时,例如通过更改location属性,我想增加store从对象引用的每个对象的版本属性course

有什么方法可以自动state引用对象的属性设置为,EntityState.Modified以便version这些对象上的属性也会增加,还是我必须手动执行?

如果有任何其他方式我应该这样做,任何建议都将受到高度赞赏。

店铺:

public class Store : BaseModel {
    public string name { get; set; }
    ...
    public int version { get; set; }
}

课程:

public class Course : BaseModel {
    public string location { get; set; }
    public int version { get; set; }
    ...
    public virtual List<Store> stores { get; set; }
}

DbContext SaveChanges() 覆盖:

case EntityState.Modified:
    dbEntityEntry.Entity.version += 1;
    break;
4

1 回答 1

0

您可以Object.GetType在覆盖的SaveChanges方法中使用来检测这种情况并从那里实现您的逻辑。

如果我理解正确,我不完全确定这是做事的正确方法;起初,这似乎是非常具体的域逻辑,因此可能出现在更高级别的层中,而不是您的 DAL。

如果您version在所有类型的实体(不是特定的)中系统地使用属性,那么您可能希望在 EF 之上创建一个小的抽象层来处理您的版本控制需求。我不知道围绕 EF 的任何此类项目。为此,您可能需要深入元数据工作区以检索给定实体的所有导航属性。

但是话又说回来,我不确定如何确定关联实体的版本是否应该被碰撞。之后是深度/传播问题,如果关联实体的版本被碰撞,他们自己的关联实体的版本是否也应该被碰撞?乍一看,这似乎不能一概而论,并且本质上是特定于领域的。我可能错了。

于 2013-09-27T08:44:38.563 回答