数据的保存应该足够智能,只保存已填充正确值的成员变量
本文关键字:保存 填充 成员 变量 数据 智能 | 更新日期: 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
。