gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:55 25 4
gpt4 key购买 nike

我正在客户端上使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com