gpt4 book ai didi

c# - Mongodb C# 驱动程序在映射复杂类时抛出异常

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:33 24 4
gpt4 key购买 nike

我在使用 BsonClassMap 映射某些类时遇到问题。我有 3 个这样的类:

abstract class A {
public string FirstName { get; set; }
}

abstract class B : A{
public string LastName { get; set; }
}

class C : B {
public int Age { get; set; }
}

我只想将 C 类中可见的属性映射到数据库。

BsonClassMap.RegisterClassMap<C>(map =>
{
map.MapProperty(c => c.FirstName).SetElementName("fn");
map.MapProperty(c => c.LastName).SetElementName("ln");
map.MapProperty(c => c.Age).SetElementName("age");
});

这会抛出一个异常,据我所知,这似乎是因为属性不属于 C 类。我应该如何映射这种结构?

最佳答案

类映射在继承层次结构中的工作方式是为层次结构中的每个类注册一个类映射,每个类映射仅定义该类中存在的属性。所以你想像这样注册所有三个类:

BsonClassMap.RegisterClassMap<A>(map =>
{
map.MapProperty(a => a.FirstName).SetElementName("fn");
});
BsonClassMap.RegisterClassMap<B>(map =>
{
map.MapProperty(b => b.LastName).SetElementName("ln");
});
BsonClassMap.RegisterClassMap<C>(map =>
{
map.MapProperty(c => c.Age).SetElementName("age");
});

您可以使用如下代码快速测试它:

var document = new C { FirstName = "John", LastName = "Doe", Age = 33 };
Console.WriteLine(document.ToJson());

哪些输出:

{ "fn" : "John", "ln" : "Doe", "age" : 33 }

或者您可以使用属性来注释您的类,这通常要容易得多,但确实需要在您的数据模型类中创建对 C# 驱动程序的依赖。

关于c# - Mongodb C# 驱动程序在映射复杂类时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9670274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com