C# 如何在修改父对象时为通过导航属性引用的对象设置EntityState.Modified?
在我使用EntityFramework的.NET MVC Web API项目中,我有这些模型<代码>存储和C# 如何在修改父对象时为通过导航属性引用的对象设置EntityState.Modified?,c#,entity-framework,asp.net-web-api,C#,Entity Framework,Asp.net Web Api,在我使用EntityFramework的.NET MVC Web API项目中,我有这些模型存储和课程。我在DbContext中重写SaveChanges(),在每次更新时增加一个version属性 我想做的是,当我更新课程对象时,例如通过更改位置属性,我想增加从课程对象引用的每个存储对象的版本属性 有没有办法自动将引用对象的状态设置为EntityState。修改了,因此这些对象的版本属性也会增加,还是我必须手动执行 如果有任何其他方法,我将不胜感激 商店: public class Store
课程
。我在DbContext中重写SaveChanges(),在每次更新时增加一个version
属性
我想做的是,当我更新课程
对象时,例如通过更改位置
属性,我想增加从课程
对象引用的每个存储
对象的版本属性
有没有办法自动将引用对象的状态
设置为EntityState。修改了,因此这些对象的版本
属性也会增加,还是我必须手动执行
如果有任何其他方法,我将不胜感激
商店:
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; }
}
您可以在重写的SaveChanges
方法中使用Object.GetType
来检测这种情况,并从中实现逻辑
如果我理解正确的话,我不能完全肯定这是正确的做事方式;起初,这似乎是非常特定的领域逻辑,因此可能出现在更高级别的层中,而不是DAL中
如果您对version
属性的使用在所有类型的实体中都是系统化的(不是特定的),那么您可能希望在EF之上创建一个小的抽象层来处理您的版本控制需求。我不知道EF附近有这样的项目。为此,您可能需要深入到以检索给定实体的所有导航属性
但话说回来,我不确定如何确定关联实体的版本是否应该被碰撞。在这之后是深度/传播问题,如果关联实体的版本被碰撞,那么它们自己的关联实体的版本也应该被碰撞吗?乍一看,这似乎无法概括,而且本质上是特定领域的。我可能错了
case EntityState.Modified:
dbEntityEntry.Entity.version += 1;
break;