我对mongo c#driver有一些问题。我有这样的课程:
class MongoEntity<T>
{
public ObjectId Id {get; set;}
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public int Version { get; set; }
public T Entity { get; set; }
}
在序列化期间,我的实体到数据库我有这样的文件:
"_id" : "510654cf33d22e1774d5a2a9",
"CreatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"UpdatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"Version" : 1,
"Entity" : {
"EntityKey" : "tom@gmail.com",
"Password" : "ICy5YqxZB1uWSwcVLSNLcA==",
"Email" : "tom@gmail.com",
"Name" : "Tom Anderson"
}
我真正想要的是让我的文档中的实体对象的所有属性与MongoEntity对象的属性处于同一级别,如下所示:
"_id" : "510654cf33d22e1774d5a2a9",
"CreatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"UpdatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"Version" : 1,
"EntityKey" : "tom@gmail.com",
"Password" : "ICy5YqxZB1uWSwcVLSNLcA==",
"Email" : "tom@gmail.com",
"Name" : "Tom Anderson"
没有实体嵌入对象。我怎样才能以最简单的方式实现这一点?
P.S。我真正需要的是一些驱动程序配置或编写自定义序列化程序,也许是动态的一些解决方法,我不想改变当前的类结构Enteties&lt; - &gt; MongoEntity
请求帮助。
答案 0 :(得分:4)
无法配置内置序列化程序以生成所需的文档格式(实体字段提升一级)。
您必须编写自定义序列化程序,但这很困难,因为您必须为每个&lt; T&gt;编写新的序列化程序,或者您必须编写适用于任何&lt; T&gt;的复杂序列化程序。
WiredPrairie的建议(人物:MongoEntityBase)是推荐的解决方案。
答案 1 :(得分:3)
只需使用包含所有必需数据库字段的基类型的子类。
public class abstract MongoEntityBase
{
public ObjectId Id {get; set;}
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public int Version { get; set; }
}
然后,使用它:
public class Person : MongoEntityBase
{
public string Email { get; set; }
public string Name { get; set; }
}
10gen提供的MongoDB C#驱动程序可以正常使用该模式。