C#EntityFramework:更新/添加/删除任意复杂的实体图

时间:2015-11-25 23:36:09

标签: c# entity-framework

我正在尝试使用前端的REACT.JS和后端的基于C#EntityFramework的REST API开发应用程序。

假设我有这样的实体关系:

Form ONE-TO-MANY Element
Element ONE-TO_MANY Attribute

我要做的是一个简单的控制器,可以简单地添加/更新/删除所有相关实体的表格。

我在REACT中创建了一个具有以下结构的应用程序:

<SyncComponent>
    <FormComponent>
        <ElementsList>
            <ElementComponent>
                <AttributesList>
                    <AttributeComponent>

<SyncComponent>,意味着执行AJAX请求到resver,将获得Form的完整JSON表示,可能如下所示:

  • Form已创建:

    {"name":"MyNewForm", "elements":[{"name":"MyNewElement","attributes":[{"name":"MyNewAttribute","value":"MyValue"}]}]}
    
  • Element已添加到现有Form

    {"id": 1, "name":"MyExistingForm", "elements":[{"name":"MyNewElement","attributes":[{"name":"MyNewAttribute","value":"MyValue"}]}]}
    
  • 更新了现有Element中的属性,并将新Element添加到Form

    {  
        "id":123,
        "name":"MyExistingForm",
        "elements":[  
            {  
                "id":321
                "name":"MyExistingElement",
                "attributes":[  
                    {
                        "id":456 
                        "name":"MyExisitngAttribute",
                        "value":"MyUpdatedValue"
                    },
                    {
                        "name":"MyNewAttribute",
                        "value":"MyNewValue"
                    }
                ]
            },
            {  
                "name":"MyNewElement",
                "attributes":[  
                    {  
                        "name":"MyNewAttribute",
                        "value":"MyNewValue"
                    }
                ]
            }
        ]
    }
    

...所以基本上是一个具有任意分配的CREATE和UPDATE任务的树(DELETE任务将调用,如果JSON中缺少elemnt,但它存在于数据库/对象表示形式的数据库中)。我知道只有在发生小的变化时我才需要发送整个大对象,但我发现仍然比在每次实体更改时发送单独的请求要好得多。首先,我看到我的方法在客户端更容易实现,其次,我将最终得到一个请求而不是打,最后,应用程序意味着允许用户进行多个更改表单,完成后,点击“保存”按钮更新状态。这样,我不能以不一致的状态结束,例如。当某些请求的某些AJAX失败时,有些请求会失败等。

要在服务器端同步此JSON,我已自动生成MVC API控制器。

我坚持的问题是EntityFramework无法正确解析给定JSON到任意深度的对象图。它适用于深度1,但不是更深。

通过示例解释: 在调用PutForm()函数时(查看下面的代码),form属性显然包含Form的实例,form.elements包含已传递Element的集合,但{ {1}}始终为空,即使在JSON中传递了一些form.elements.toList[0].attributes

attribute

如何强制EntityFramework从JSON正确构建完整对象图,我可以执行原子更新/创建/删除这个任意复杂的实体图吗?

1 个答案:

答案 0 :(得分:0)

@Brett Caswell 你完全正确

  

您在问题上提供的最相关信息是   &#34; form.elements.toList [0] .attributes总是为空,即使......   传递的属性&#34;

详细描述,简单问题。集合attributes的名称与模型对象中的属性并不完全对应,所以一旦我更改了它,映射就开始工作(到任何深度),所以现在我只需要迭代它们并将状态设置为添加修改,具体取决于ID是否为0。