Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在修改父对象时为通过导航属性引用的对象设置EntityState.Modified?_C#_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# 如何在修改父对象时为通过导航属性引用的对象设置EntityState.Modified?

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

在我使用EntityFramework的.NET MVC Web API项目中,我有这些模型<代码>存储和
课程
。我在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;