我有一个名为“vehicle”的常规C#类,其名称包括Name,NumberPlate,MaxSpeed等。 该类的所有数据都存储在SQLite数据库中,其中我有一个表“Car”和“Boat”。表colums与类属性具有相同的名称(但是,列属性多于类属性 - vehicle是更通用的抽象)。目前,我必须逐个分配查询结果,如下所示:
while (await statement.StepAsync())
{
myVehicle.Name = statement.Columns["Name"];
//[...]
myVehicle.MaxSpeed = decimal.TryParse(statement.Columns["MaxSpeed"]);
}
此外,我必须检查是否存在某些列(“Car”和“Boat”具有不同的列集),这比我想要的代码更多。
我读到了关于将我的数据库表映射到我的类的EntityFramework - 但这似乎有点过分了。我的要求是映射具有相同名称的属性和列,并忽略其他所有内容。 是否有“简单”(开发时间,代码行)方式将我的表列映射到我的类?
感谢阅读!
答案 0 :(得分:0)
手机8中的限制意味着很多标准都会回答这个问题("只需使用{some ORM / micro-ORM}")申请,因为他们在电话8上没有工作。你可以使用反射来做很多事情,但是:反思可能(相对)慢,所以这取决于你有多少数据将处理。如果它是偶然的和轻的:好的,反射掉。
运行时元编程(图书馆使用的技巧,例如" dapper"在完整的.NET中使这些事情变得非常快)在限制运行时不可用,所以如果你想避免大量的锅炉 - 留下构建时元编程的板块。最简单的是,我想知道你是否可以使用像T4这样的东西来为C#自动创建这些方法。还有 方法也可以使用reflection-emit API为手机8构建程序集(在构建时),但这是一条相当硬核的路径。
我的想法:
答案 1 :(得分:0)
有一些 helper 可能适合您的情况。基本上,它将采用字典并尝试使用反射填充对象属性。我自己也没试过。
您只需执行以下操作:
while (await statement.StepAsync())
{
myVehicle = DictionaryToObject<Car>(statement.Columns);
}
可能需要一些进一步的工作来使其运行,但也许是一个良好的开端。