Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据库行转换为对象_C#_Sql Server_Database_Object - Fatal编程技术网

C# 将数据库行转换为对象

C# 将数据库行转换为对象,c#,sql-server,database,object,C#,Sql Server,Database,Object,我的数据库中有一个包含两行员工数据的表 ........... 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

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

...........

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

这是一个例子,我之所以需要它是因为,我有一个表,其中存储了需要首次设置的设置(宽度、高度、网格标签)等 应用程序运行


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

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


通过这种方式,您不必用代码“污染”employee类,您可以以一种良好的、可测试的方式保持关注点的分离。

您可以使用实体框架、Linq2SQL、亚音速、nHibernate等。。根据数据库架构生成对象。

已编辑 我似乎误解了你的问题。看起来你想要的是一个orm映射器,但实际上你想要的是一个你可以指向数据库并让它为你构建你需要的对象的东西。我留下原始答案的其余部分,因为ORM在这些情况下仍然有用

有几种可用于.Net,如果您是在.NET3或更高版本上开发,那么就有一种内置的调用Linq。Linq的入门超出了这个答案的范围,所以这里有一个简单的例子,可以引导您了解它。另一个Microsoft产品名为EntityFramwork,有关该产品的更多信息,请参见

是Hibernate框架的一个免费.Net端口,它也可以完成任务

ORM映射器使将数据库数据转换为类变得非常容易,但它们也带来了权衡。有关更多信息,请参见条目。

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


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

为什么不从数据库中选择此格式的数据并将其保存到文件中

对于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

我想这是我想做的一个选择,就像powerdesigner从db做逆向工程一样。后来我添加了文本“在ORM之外”。但这并不意味着它应该被否决。我真的认为人们需要知道,除了他们的方式,还有更多的方式是正确的。(这是一个ORM的例子…只是一个手工编码的例子)NHibernate也是小项目的一个难题有没有MyGeneration模板可以做到这一点?MyGeneration附带了EasyObjects和dOOdads的模板(下载),这是由同一家公司构建的ORM。选择“Employee e”+cast(id为varchar)+'=new Employee()从您的表中,{ID='+cast(ID为varchar)+',Name=@“'+Name+'”};'
//generated
Employee e1 = new Employee();
e2.ID = 1;
e2.Name = "...";


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