【问题标题】:Updating an inner list using MongoDB使用 MongoDB 更新内部列表
【发布时间】:2012-07-21 17:02:11
【问题描述】:

我有一个对象

public class Object1{
public List<Object2> {get;set;}
}


public class Object2{
public Name{get;set;}
public Address{get;set;}
}

我有一个功能,用户可以只更新 Object2 的一个实例。所以我保存 Object2 的代码看起来像

[HttpPost]
public ActionResult SaveObject2(Object2 obj2)
{
  if (obj2.Id == null){
       //Add Logic
       obj1.Obj2List.Add(obj2)  
    }
   else{
      // Update logic
   }
}

但 obj2.Id 永远不会为 null。Id 是 ObjectId 类型。我如何检查逻辑以查看是否需要插入或更新?我正在使用官方 C# 驱动程序使用 asp.net MVC 3 和 Mongo DB。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    ObjectId 类型是结构,而不是类 - 所以它永远不会是 null。请改为检查 ObjectId.Empty

    但请注意:我想您将Object2 的ID 存储在请求之间的某个隐藏字段中。如果是这种情况,请注意恶意用户可以通过使用 HTTP 代理(例如 Fiddler)轻松更改 ID,从而诱使您相信 Object2 正在更新而不是添加。

    根据您要执行的操作的上下文,我建议您执行一些额外的检查,以更可靠地确定您是否应该插入或更新您的对象。

    【讨论】:

    • 谢谢!你是对的,我使用隐藏字段来存储 ID。如果我不使用隐藏字段,我还能如何实现此功能?
    • @user636525 尝试查看这个 SO 问题:stackoverflow.com/questions/10497126/…。它包含许多有用的提示。
    • 我想知道其他人是如何在 ASP.Net MVC 世界中传递 id 的!我读了史蒂夫·桑德森的书,我从书中的样本中得到了将 id 作为隐藏字段传递的想法。
    • @user636525 你会发现很多应用程序只是像你一样在隐藏字段中传递它。这真的没那么糟糕——在最坏的情况下,你最终会添加一个对象而不是编辑一个对象。您是否要使用一些额外的检查实际上取决于相关数据的上下文和敏感性。
    猜你喜欢
    • 2018-12-08
    • 2011-06-02
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多