C# EntityFramework使用相关对象更新实体

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

我有一个项目实体和一个规则实体。一个项目可以有很多规则

编辑1:这是我们定义的关系。很抱歉,导航属性中没有使用复数,我们尚未更新它

所以我有这个方法:

    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())
        {
            ...

多谢各位

在我看来,在最新版本的实体框架中,实体不会自动添加到更改跟踪器中(如果已分配给更改跟踪器中的实体)

显然,这取决于角色和项目的关联方式


我想更简单的方法是创建一个过程,重新加载项目,包括所有角色,从列表中删除所选角色,然后保存,此时我认为所有更新都正确完成。

我解决了这个问题。在更新之前,我需要在相同的上下文中重新加载项目。

实体和规则之间的关系是如何定义的?您好!我已经用模型定义更新了我的问题。谢谢你卢卡的回答。不幸的是,这没有帮助。见我的更新上面。