C# EntityFramework使用相关对象更新实体
我有一个项目实体和一个规则实体。一个项目可以有很多规则 编辑1:这是我们定义的关系。很抱歉,导航属性中没有使用复数,我们尚未更新它 所以我有这个方法:C# EntityFramework使用相关对象更新实体,c#,entity-framework,C#,Entity Framework,我有一个项目实体和一个规则实体。一个项目可以有很多规则 编辑1:这是我们定义的关系。很抱歉,导航属性中没有使用复数,我们尚未更新它 所以我有这个方法: public bool Update(Project project) { Logger.Log(GetType(), string.Format("Updating project {0}", project)); using (var ctx = new EntityModelContainer
public bool Update(Project project)
{
Logger.Log(GetType(), string.Format("Updating project {0}", project));
using (var ctx = new EntityModelContainer())
{
if (project.Id == 0)
{
return false;
}
try
{
ctx.ProjectSet.Attach(project);
ctx.Entry(project).State = EntityState.Modified;
return ctx.SaveChanges() >= 1;
}
catch (Exception exc)
{
throw new ComplianceException(exc.Message, exc);
}
}
}
它将更新项目的所有标量属性。但如果我在项目中添加或删除规则并运行Updateproject,则不会考虑它。为什么?
编辑2:我还尝试重新读取项目并分配更新的值。请注意,projectRead.Rule是一个列表
public bool Update(Project projectGiven)
{
// Add all changes here
Project projectRead = this.ReadProject(projectGiven.Id);
if (projectRead == null)
{
Logger.Log(GetType(), "Project not found");
return false;
}
projectRead.ProjectName = projectRead.ProjectName;
projectRead.Report = projectRead.Report;
projectRead.Rule = projectRead.Rule;
Logger.Log(GetType(), string.Format("Updating project {0}", projectRead));
using (var ctx = new EntityModelContainer())
{
...
多谢各位 在我看来,在最新版本的实体框架中,实体不会自动添加到更改跟踪器中(如果已分配给更改跟踪器中的实体) 显然,这取决于角色和项目的关联方式
我想更简单的方法是创建一个过程,重新加载项目,包括所有角色,从列表中删除所选角色,然后保存,此时我认为所有更新都正确完成。我解决了这个问题。在更新之前,我需要在相同的上下文中重新加载项目。实体和规则之间的关系是如何定义的?您好!我已经用模型定义更新了我的问题。谢谢你卢卡的回答。不幸的是,这没有帮助。见我的更新上面。