Deserialization LiteDb类反序列化不起作用
我有一个B班,有一个a班的成员。正如我在LiteDb Studio中看到的那样,LiteDb可以正确地存储它。“As”集合也可以。为什么反序列化不正确?A类有一个BsonCtor。B也Deserialization LiteDb类反序列化不起作用,deserialization,litedb,Deserialization,Litedb,我有一个B班,有一个a班的成员。正如我在LiteDb Studio中看到的那样,LiteDb可以正确地存储它。“As”集合也可以。为什么反序列化不正确?A类有一个BsonCtor。B也 namespace ConsoleAppTestDeserializatioBug { class Program { public class A { public A() { A_ID = ObjectId.NewObjectId(); }
namespace ConsoleAppTestDeserializatioBug {
class Program {
public class A {
public A() { A_ID = ObjectId.NewObjectId(); }
[BsonCtor]
public A(ObjectId id, string name) { A_ID = id; Name = name; }
[BsonId]
public ObjectId A_ID { get; set; }
public string Name { get; set; }
public const string CollectionName = "As";
}
public class B {
public const string CollectionName = "Bs";
public B() { B_ID = ObjectId.NewObjectId(); }
[BsonCtor]
public B(ObjectId id, int dummy, A a) { B_ID = id; Dummy = dummy; aObj = a;}
[BsonId]
public ObjectId B_ID { get; set; }
public int Dummy { get; set; }
[BsonRef(A.CollectionName)]
public A aObj { get; set; }
}
private LiteDatabase _LiteDatabase;
static void Main(string[] args) {
var p = new Program();
p.Test();
}
private void Test() {
A a = new A(); // Create my Object
a.Name = "Name123";
var initialId = a.A_ID;
B b = new B();
b.Dummy = 123;
b.aObj = a;
_LiteDatabase = new LiteDatabase(new ConnectionString(@"C:\Temp\tst1.db") { Connection = ConnectionType.Shared });
ILiteCollection<A> aas = _LiteDatabase.GetCollection<A>(A.CollectionName);
aas.Insert(a);
ILiteCollection<B> bs = _LiteDatabase.GetCollection<B>(B.CollectionName);
bs.Insert(b);
// Get in the DB
var bb = bs.FindAll().ToArray()[0];
var aa = bb.aObj;
var aaid = aa.A_ID;
if (aaid == initialId) { Console.WriteLine("Id is correct");}
var aname = aa.Name; // aname i s null!!!!! and why
}
}
}
名称空间控制台AppTestDeserializationbug{
班级计划{
公共A类{
公共A(){A_ID=ObjectId.NewObjectId();}
[主持人]
公共A(ObjectId,string name){A_id=id;name=name;}
[BsonId]
公共ObjectId A_ID{get;set;}
公共字符串名称{get;set;}
public const string CollectionName=“As”;
}
公共B级{
public const string CollectionName=“Bs”;
公共B(){B_ID=ObjectId.NewObjectId();}
[主持人]
公共B(ObjectId,int dummy,aa){B_id=id;dummy=dummy;aObj=A;}
[BsonId]
公共ObjectId B_ID{get;set;}
公共int伪{get;set;}
[BsonRef(A.CollectionName)]
公共A aObj{get;set;}
}
私有LiteDatabase_LiteDatabase;
静态void Main(字符串[]参数){
var p=新程序();
p、 Test();
}
专用无效测试(){
A=新建A();//创建我的对象
a、 Name=“Name123”;
var initialId=a.a\u ID;
B=新的B();
b、 假人=123;
b、 aObj=a;
_LiteDatabase=新的LiteDatabase(新的ConnectionString(@“C:\Temp\tst1.db”){Connection=ConnectionType.Shared});
ILiteCollection aas=_LiteDatabase.GetCollection(A.CollectionName);
aas.插入(a);
ILiteCollection bs=_LiteDatabase.GetCollection(B.CollectionName);
bs.插入(b);
//进入数据库
var bb=bs.FindAll().ToArray()[0];
var aa=bb.aObj;
var aaid=aa.A_ID;
如果(aaid==initialId){Console.WriteLine(“Id正确”);}
var aname=aa.Name;//aname为空!!!!!为什么
}
}
}
我在
我必须在我的查询中添加一个“include”:
var bb = bs.Include(x => x.aObj).FindAll().ToArray()[0];