我正在尝试创建一个简单的域模型,该模型旨在用于MongoDB的ASP.NET Web API项目和位于here的示例中的C#驱动程序。该示例显示以下实体:
public class Entity
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
我的问题是这个类包含属于MongoDB.Bson命名空间的ObjectId类型的Id属性,需要在Visual Studio项目中引用。现在这一切都很好,除非我想在我的Win RT(Windows应用商店应用)项目中使用这个实体,在这种情况下我不能引用MongoDB,因为没有适当的绑定。
在我的C#Win RT项目中,我希望使用我的REST API,它将返回包含该实体属性的JSON,因此我想在使用JSON.NET进行反序列化时重用Entity类。
从我的实体类中删除MongoDB依赖项的最佳方法是什么?是否最好将我的Id属性改为类型字符串?如果有的话,我应该注意这种方法吗?
答案 0 :(得分:1)
是的,我只是将其设为string
。但理想情况下,您可能会认为您在WinRt应用程序中使用的模型是视图模型,并且不使用本机BSON数据类型。
当我做了类似的事情时,我通常会暴露一个视图模型,并且没有与客户端共享对象的内部数据库表示。这通常是必要的,因为UI需要更复杂和解决的值(像ObjectId
这样的东西不像拥有id可能指向的数据那样有用)。
通过使它成为string
,你不会在C#中失去太多,因为无论如何转换都非常简单快速。
或者,您应该考虑使用BsonClassMap
作为记录here。您可以从类型中拆分类型装饰,并仅在服务器上进行所需的任何修改。