数据的保存应该足够智能,只保存已经填充了适当值的成员变量?

Saving of data should be intelligent enough to save only member variables that have been populated with proper values?

我的开发环境信息如下:

-MongoDB 3.0.0

-MongoDB C# 驱动程序版本 1.7.0.4714

-Microsoft Visual Studio 专业版 2013

-.NET Framework 4.0

假设我有以下 C# POCO 位置 class

      public class Location

      {

           public Object Id { get; set; }

           public double latitude { get; set; }

           public double longitude { get; set; }

           public String LocDescription { get; set; }

       }

前面提到的 class 是一个 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 class,以及它在Global.asax.cs文件中的对应映射,以便执行上述保存功能?我真的很想避免使用 Null 或 Nullable 类型。

使用BsonIgnoreIfDefaultAttribute 标记class 成员,其默认值不应序列化到数据库。

在你的情况下,它就像:

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; }
}

对于 string/nullable/object 值,您还可以使用 BsonIgnoreIfNullAttribute