c# - Javascript JSON仅序列化第一级

标签 c# javascript json angularjs entity-framework

我正在客户端上使用 AngularJS 构建应用程序,在后端使用 ASP.NET WebAPI/Entity Framework。

我需要确保存储或回滚完整的事务,而不是依赖于纯粹的 RESTful 服务。因此,我编写了一个 JavaScript UnitOfWork 实现,它跟踪我加载的每个对象,并按类型单独存储它们。

我在坚持它们时遇到了问题。

假设我通过 Web API 加载了以下对象:

{
    FirstName: "Bob",
    LastName: "Jensen",
    Email: "test@example.com",
    Country: { ID: 61, Name = "Zimbabwe"},
    CountryID: 61,
    Animals: [
        { Name: "Mittens", ID: 2},
        { Name: "Rex", ID: 1}
    ]
}

现在,假设我更改了 Bob 的姓氏并想保存它。我将我的 UoW 发送到服务器,并在 EF 上下文中对我编辑的对象执行以下操作(直到此时没有代码接触 obj):

databaseContext.Entry(obj).State = EntityState.Modified;

这给了我这样的错误:

Attaching an entity of type 'MyApp.Model.Country' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.

我的第一个想法是在将不需要的属性发送回服务器之前将其删除 - 因此在我上面的 JSON 中,我应该发送回类似的结果,但没有“国家”和“动物”属性。我仍然想保留 CountryID。

  1. 这是否可以在不明确指定要删除哪些属性的情况下实现?
  2. 自从我遇到这个问题以来,我的方法在概念上是否有问题?我应该改为处理这个服务器端吗?

最佳答案

设法通过删除我的 JavaScript 对象上的集合和对象引用使其工作:

var clone = {};
for (prop in obj) {
    if (typeof obj[prop] == "string" || typeof obj[prop] == "number" || typeof obj[prop] == "boolean") {
        clone[prop] = obj[prop];
    }
}

现在 EF 很高兴,我通过不发送整个图节省了极少的带宽。

关于c# - Javascript JSON仅序列化第一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560801/

相关文章:

c# - 为什么编译器不提示数组或对象初始值设定项中有额外的 ','?

javascript - Adsense 在 iF​​rame 内加载

javascript - 在 Windows 命令行上构建 Modernizr

java - Android-无法使用 woocommerce api 创建订单

c# - T4 抑制错误消息 "ErrorGeneratingOutput"

c# - 在文件夹中搜索csv文件并插入mysql数据库

javascript - 在没有 jquery 的评级星中表示来自 json 文件的数据!!纯JavaScript

php - 设置服务器端脚本以连续记录来自数据库中 API 的流式 JSON 数据?

c# - .NET MVC 身份验证 - 表单 + Windows 身份验证

javascript - 切换事件监听器