将数据库表行直接反序列化为C#对象 - 有没有这种机制?

Lou*_*ong 8 c#

我是C#的新手,这可能最终成为一个愚蠢的问题,但无论如何我还是要问.

是否有一个使用C#的机制将执行的SQL语句的结果反序列化为ac#object?

我有一个C#程序从一个sql服务器读取一个表来存储一个对象中的行 - 我正在手动将每个列值分配给一个对象成员,所以我想知道是否有一种方法将行自动序列化为一个对象.或者甚至更好,在同一类型的对象集合中的整个表.

我的环境是C#,VS2010,.NET4,SQLServer2008.假设我知道我需要的列,它不是select*查询.

一个简洁的例子的链接也将受到赞赏.

谢谢.

Dar*_*rov 8

您可以使用ORM执行此操作.ADO.NET实体框架(检查视频教程)和NHibernate是流行的选择.

  • +1,以及LINQ to SQL和任意数量的其他ORM (3认同)

Mar*_*ell 5

如果按表名命名的列,则可以使用LINQ-to-SQL而不使用任何映射代码-只需使用ExecuteQuery

using(var dc = new DataContext(connectionString)) {
    var objects = dc.ExecuteQuery<YourType>(sql); // now iterate object
}
Run Code Online (Sandbox Code Playgroud)

此外,可以使用string.Format规则自动设置sql参数:

class Person {
    public int Id {get;set;}
    public string Name {get;set;}
    public string Address {get;set;}
}
using(var dc = new DataContext(connectionString)) {
    List<Person> people = dc.ExecuteQuery(@"
          SELECT Id, Name Address
          FROM [People]
          WHERE [Name] = {0}", name).ToList(); // some LINQ too

}
Run Code Online (Sandbox Code Playgroud)

当然,您也可以使用VS工具来创建类型化的数据上下文,从而实现以下目的:

using(var dc = new SpecificDataContext(connectionString)) {
    List<Person> people =
         (from person in dc.People
          where person.Name == name
          select person).ToList();
}
Run Code Online (Sandbox Code Playgroud)