数据的保存应该足够智能,只保存已填充正确值的成员变量

本文关键字:保存 填充 成员 变量 数据 智能 | 更新日期: 2023-09-27 18:28:23

以下是关于我的开发环境的信息:

-MongoDB 3.0.0

-MongoDB C#驱动程序版本1.7.0.4714

-Microsoft Visual Studio Professional 2013

-.NET Framework 4.0

假设我有以下C#POCO定位类

      public class Location
      {
           public Object Id { get; set; }
           public double latitude { get; set; }
           public double longitude { get; set; }
           public String LocDescription { get; set; }
       }

前面提到的类是一个C#POCO,它将映射到一个名为Location的MongoDB集合。

当应用程序启动时,以下代码将从Global.asax.cs执行

        if (false == BsonClassMap.IsClassMapRegistered(typeof(Location)))
        {
            BsonClassMap.RegisterClassMap<Location>(cm =>
            {
                cm.AutoMap();
            });

        } // 

我们需要将数据保存为足够智能的数据,以便执行以下操作:

   {
       "_id" : ObjectId("567f90bc0a73fc5b0a81f231"),
       "lat" : 309,
       "lng" : 45, 
       "LocDescription" : "passed the bridge, take a left at Rover Street."
  }

或者(如果只提供了位置描述)

   {
       "_id" : ObjectId("5680e1c30a73fc5b0a81f29a"), 
       "LocDescription" : "Going North, take a right at the Eaton Ave & Kennedy Drive.  Take the Overpass to Gaitherburg."
   }

或者(如果只提供纬度和经度)

 {
       "_id" : ObjectId("567f90bc0a73fc5b0a81f231"),
       "lat" : 184,

       "lng" : 22
  }

有人能告诉我如何修改C#POCO Location类,以及它在Global.asax.cs文件中的相应映射,以便执行上述保存功能吗?我真的想避免使用Null或Nullable类型。

数据的保存应该足够智能,只保存已填充正确值的成员变量

使用BsonIgnoreIfDefaultAttribute标记默认值不应序列化到DB的类成员。

在你的情况下,它会像:

public class Location
{
   public Object Id { get; set; }
   [BsonIgnoreIfDefault]
   public double latitude { get; set; }
   [BsonIgnoreIfDefault]
   public double longitude { get; set; }
   [BsonIgnoreIfDefault]
   public String LocDescription { get; set; }
}

对于字符串/可为null值/对象值,也可以使用BsonIgnoreIfNullAttribute