2010-06-25 13 views
7

Soy nuevo en C# y esto puede terminar siendo una pregunta tonta, pero tengo que preguntar de todos modos.Deserializar una fila de tabla de base de datos directamente en un objeto C# - ¿hay un mecanismo para esto?

¿Existe un mecanismo con C# para deserializar un resultado de una instrucción SQL ejecutada en un objeto C#?

Tengo un programa C# que lee una tabla de un servidor sql que almacena la fila en un objeto - estoy asignando manualmente cada valor de columna a un miembro de objeto así que me preguntaba si hay una manera de serializar la fila automágicamente en un objeto. O mejor aún, una tabla completa en una colección de objetos del mismo tipo.

Mi entorno es C#, VS2010, .NET4, SQLServer2008. Supongo que sé las columnas que necesito, no es una consulta de selección *.

También se apreciará un enlace a un buen ejemplo.

Gracias.

Respuesta

4

Si las columnas llamadas según los nombres de las tablas, se puede hacer esto con LINQ a SQL sin cualquier código mapeo - simplemente usando ExecuteQuery:

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

Adicionalmente, el SQL puede ser automáticamente con parámetros string.Format usando reglas:

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 

} 

Por supuesto, también puede utilizar las herramientas de VS para crear un contexto de datos con tipo, permitiendo cosas como:

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

Desaparecieron todos los comentarios y aparentemente marqué esto como la respuesta correcta, ¿qué pasó aquí? – Alan

6

Puede usar ORM para hacerlo. ADO.NET Entity Framework (consulte video tutorials) y NHibernate son opciones populares.

+3

+1, así como LINQ to SQL y cualquier cantidad de ORM –

+0

LINQ to Entities tiene la intención de reemplazar ADO.NET Entity Framework y LINQ to SQL. Ver http://msdn.microsoft.com/en-us/library/bb386964.aspx –

Cuestiones relacionadas