考虑两个类:
public class Entity
{
public ObjectId Id { get; set; }
public E2 e = new E2(ConfigClass.SomeStaticMethod());
}
public class E2
{
[BsonIgnore]
public int counter = 5;
public DateTime last_update { get; set; }
public E2(int c)
{
counter = c;
}
}
我将像这样存储然后Entity
从 MongoDb 中检索类型的对象(假设集合为空):
var collection = database.GetCollection<Entity>("temp");
collection.Save<Entity>(new Entity());
var list = collection.FindAs<Entity>(new QueryDocument());
var ent = list.Single();
无论ConfigClass.SomeStaticMethod()
返回什么,该counter
字段都将为零(整数的默认值)。但是,如果我向该类添加一个默认构造函数,E2
那么counter
将是5
.
这意味着 MongoDb 的 C# 驱动程序在调用非默认构造函数时遇到了问题(这是完全可以理解的)。我知道BsonDefaultValue
BSON 库中定义了一个属性,但它只能接受constant expressions
.
我要做的是从配置文件中加载字段的默认值,而其余的对象是从 MongoDb 中检索的!?当然,用最少的努力。
[更新]
我也用相同的结果对此进行了测试:
public class Entity
{
public ObjectId Id { get; set; }
public E2 e = new E2();
public Entity()
{
e.counter = ConfigClass.SomeStaticMethod();
}
}
public class E2
{
[BsonIgnore]
public int counter = 5;
public DateTime last_update { get; set; }
}
运行此代码导致counter
再次为零!