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

时间:2010-06-25 17:45:41

标签: c#

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

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

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

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

还将赞赏一个简洁例子的链接。

感谢。

2 个答案:

答案 0 :(得分:6)

您可以使用ORM执行此操作。 ADO.NET Entity Framework(结帐video tutorials)和NHibernate是受欢迎的选择。

答案 1 :(得分:4)

如果根据表名命名的列,则可以使用LINQ-to-SQL而不使用任何映射代码执行此操作 - 只需使用ExecuteQuery

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

此外,可以使用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

}

当然,您也可以使用VS工具创建类型化数据上下文,允许以下内容:

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