数据的保存应该足够智能,只保存已经填充了适当值的成员变量?
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
。
我的开发环境信息如下:
-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
。