Abe*_*Abe 33 c# mongodb mongodb-.net-driver
我正在使用官方MongoDB C#Drive v0.9.1.26831,但我想知道给定一个POCO类,无论如何都要忽略某些属性插入.
例如,我有以下类:
public class GroceryList
{
public string Name { get; set; }
public FacebookList Owner { get; set; }
public bool IsOwner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让IsOwner在插入GroceryList对象时不插入?基本上,我从数据库中获取对象,然后在应用程序层中设置IsOwner属性,然后将其返回到控制器,然后将对象映射到视图模型.
希望我的问题有道理.谢谢!
Abe*_*Abe 52
看起来[BsonIgnore]属性完成了这项工作.
public class GroceryList : MongoEntity<ObjectId>
{
public FacebookList Owner { get; set; }
[BsonIgnore]
public bool IsOwner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
And*_*ich 15
你也可以使IsOwner为Nullable并将[BsonIgnoreExtraElements]添加到hole类:
[BsonIgnoreExtraElements]
public class GroceryList : MongoEntity<ObjectId>
{
public FacebookList Owner { get; set; }
public bool? IsOwner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在诽谤期间,将忽略具有空值的财产.但我认为[BsonIgnore]会更适合你的情况.
ire*_*huk 14
或者,如果您由于某种原因不想使用该属性(例如,如果您不想为MongoDB.BsonDTO 带来额外的依赖性),您可以执行以下操作:
BsonClassMap.RegisterClassMap<GroceryList>(cm =>
{
cm.AutoMap();
cm.UnmapMember(m => m.IsOwner);
});
Run Code Online (Sandbox Code Playgroud)
以防万一有人可能对另一种方式感兴趣。通过约定:
public class IgnoreSomePropertyConvention : ConventionBase, IMemberMapConvention
{
public void Apply(BsonMemberMap memberMap)
{ // more checks will go here for the case above, e.g. type check
if (memberMap.MemberName != "DoNotWantToSaveThis")
memberMap.SetShouldSerializeMethod(o => false);
}
}
Run Code Online (Sandbox Code Playgroud)
然后您需要在应用程序启动期间注册一次此约定:
ConventionRegistry.Register("MyConventions", new ConventionPack { new IgnoreBaseIdConvention() }, t => true);
Run Code Online (Sandbox Code Playgroud)
您可能希望组合 BsonIgnoreExtraElements 和 BsonIgnore 两个属性。原因是虽然 BsonIgnore 不会向您的数据库插入“IsOwner”属性,但是如果您的数据库中有包含此字段的“旧”实例,并且您将从功能中的模型中删除此字段或扩展您的“GroceryList” " 类并在数据库中使用您的新类将出现异常:
“元素‘IsOwner’与类的任何字段或属性都不匹配。”
另一种方法(而不是编辑您的模型类)是将“注册类映射”与“ SetIgnoreExtraElements”和“UnmapMember”一起使用。
在您的情况下,只需在初始化驱动程序时添加此代码:
BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
cm.UnmapMember(m => m.IsOwner);
});
Run Code Online (Sandbox Code Playgroud)
您可以在以下位置阅读有关 Mongo 类映射的更多信息:
http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/
| 归档时间: |
|
| 查看次数: |
24796 次 |
| 最近记录: |