将数据库行转换为对象

时间:2009-06-15 12:44:04

标签: c# sql-server database object

我的数据库中有一个包含2行员工数据的表。

...........

ID |  Name

...........

1 | Jon Doe

2 | Jane Doe

...........

我在我的代码中需要这个,就像这样,代码。我需要将其转换为:

Employee e1 = new Employee();
e1.ID = 1;
e1.Name = "Jon Doe";

Employee e2 = new Employee();
e2.ID = 2;
e2.Name = "Jane Doe";

现在,当应用程序第一次运行时,它可以保存到数据库中,因此可以避免将1200个对象实例写入数据库。 因此,我只需要在第一次运行时使用某种方式,例如使用XML。

这是一个例子,为什么我需要它是因为,我有一个表存储设置(宽度,高度,网格标签)等需要第一次设置的东西 该应用运行。

我可以用什么方式生成这个,有没有可用的工具,或者你会怎么做?

5 个答案:

答案 0 :(得分:9)

在ORM之外执行此操作的常规方法是使用.Create()方法编写EmployeeFactory类,该方法接受DataRow作为参数并返回新的Employee对象。

通过这种方式,您不必使用代码“污染”您的员工类,并且可以以一种不错的,可测试的方式保持关注点的分离。

答案 1 :(得分:2)

<强>被修改 我似乎误读了你的问题。它看起来像你想要的是一个orm mapper,但你真正想要的是MyGeneration,你可以指向一个数据库并让它构建你需要的对象。我留下原始答案的其余部分,因为ORM在这些情况下仍然有用。

有几种可用于.Net,如果你在.Net 3或更高版本上开发,那么你可以使用内置的Linq。 Linq入门超出了这个答案的范围,所以这里有great blog post from Scott Guthrie引导您完成它。可以使用另一个名为EntityFramwork的Microsoft产品,可以找到有关它的更多信息here

NHibernate是Hibernate框架的免费.Net端口,它也完成了工作。

ORM mappers使数据库数据很容易转换为类,但它们需要权衡利弊。有关详细信息,请参阅wikipedia条目。

答案 2 :(得分:1)

为什么不以这种格式从db中选择数据并将其保存到文件中?

对于mysql,我会做(并做):

将此查询保存为c:\ in.sql

SELECT CONCAT('Employee e', id, ' = new Employee();', char(13),
       'e', id, '.ID = ', id, ';', char(13),
       'e', id, '.Name = "', name, '";',
        char(13), char(13)) as '//generated' from employee;

从命令行运行:

mysql -u root < c:\in.sql > c:\out.cs

这将从in.sql执行查询,并以这种格式将输出输出到out.cs:

//generated
Employee e1 = new Employee();
e2.ID = 1;
e2.Name = "...";


Employee e2 = new Employee();
e2.ID = 2;
e2.Name = "...";

答案 3 :(得分:0)

您可以使用Entity Framework,Linq2SQL,SubSonic,nHibernate等来根据数据库架构生成对象。

答案 4 :(得分:0)

有许多ORM工具(如Cody C建议的那样)将生成代码并为您进行映射。但是从问题的声音来看,我认为这对你的申请来说太过分了。如果这就是您所需要的,请使用您的perfered数据访问(动态sql,存储过程,视图等)运行查询,然后将返回数据中的值映射到对象。

这当然不是最优雅的解决方案,但引入第三方工具可能比您需要的更多。