从数据表或数据库表生成类

时间:2010-07-20 13:06:42

标签: c# reflection code-generation

我有一个项目,客户端可以导入excel文件,csv或制表符分隔文件。此文件被加载到数据表中,我将其转换为SQLite数据库表。我真的更喜欢使用强类型对象和数据表,所以有没有办法使用反射轻松地将创建的数据库表转换为强类型类?踢球者是导入应用程序的文件总是不同的(即不同的列)所以我不能真正硬编码任何强类型的对象,它们总是必须在运行中生成。

3 个答案:

答案 0 :(得分:4)

理论上,您可以使用Reflection.Emit之类的东西创建程序集,甚至可以通过生成代码文件并调用编译器将它们构建到程序集中来构建。

但是,我不确定这有什么用处。如果在运行时确定这些表的模式,那么这些生成的类的任何使用都将无法使用您在不使用反射的情况下添加的这些强类型属性,并且此时您基本上处理的是一种微弱的东西,加上反射的性能影响。 C#4.0中的动态类型可能会消除性能损失,但是你仍然会增加很多复杂性而没有真正的好处。

答案 1 :(得分:2)

如果有可能,您可以使用C#4的新dynamic功能。更具体地说是ExpandoObject Class

  

ExpandoObject表示其成员可以的对象   动态添加和删除   运行时间。

您还拥有DynamicObject Class

请查看以下链接以获取更多信息:

Dynamic class creation

Populating and Using Dynamic Classes in C#/.NET 4.0

How do create a Dynamic class in C# 4?

答案 2 :(得分:0)

Ryan已经提出了正确的问题,我也只能认为强类型类的唯一好处是在设计或编译时,而不是在运行时。

也许你想在创建SQLlite表之后在另一个使用该表的应用程序中构建一些强类型类。

在这种情况下,你可以查看T4 - Text Template Transformation Toolkit,因为它能够从查询中创建强类型类,这样你就可以在编译时使用这些类来进一步应用。

但在开始使用它之前,你应该知道T4是best kept Visual Studio secret之一。 ; - )