¿Cómo convierto una tabla de datos en un objeto POCO en Asp.Net MVC?¿Cómo convierto una tabla de datos en un objeto POCO en Asp.Net MVC?
Respuesta
Pase cada DataRow al constructor de la clase (o use getters/setters) y traduzca cada columna a la propiedad correspondiente. Tenga cuidado con las columnas que aceptan nulos para extraerlas correctamente.
public class POCO
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime? Modified { get; set; }
...
public POCO() { }
public POCO(DataRow row)
{
this.ID = (int)row["id"];
this.Name = (string)row["name"];
if (!(row["modified"] is DBNull))
{
this.Modified = (DateTime)row["modified"];
}
...
}
}
@tvanfosson: ¿por qué siempre tiene que tener el mismo ideas como yo, y escriba 5 segundos más rápido que yo :-) –
Puedo controlar el tiempo y leer las mentes. : -o – tvanfosson
¿Qué se modifica aquí? Entiendo que debemos verificar si algún valor en la fila es nulo antes de asignar a las propiedades de la clase. Pero, ¿a qué te refieres como modificado? – Josh
Una tabla de datos generalmente contiene muchas filas. ¿Desea convertir cada fila en una instancia de objeto?
En ese caso, podría, por ejemplo, añadir un constructor a su objeto POCO que aceptará un DataRow
como parámetro, y entonces extrae los bits y piezas de que DataRow
:
public YourPOCO(DataRow row)
{
this.Field1 = row["Field1"].ToString();
...
this.FieldN = Convert.ToInt32(row["FieldN"]);
}
y así sucesivamente, y luego llamar que constructor en cada una de las filas en la DataTable.Rows
colección:
List<YourPOCO> list = new List<YourPOCO>();
foreach(DataRow row in YourDataTable.Rows)
{
list.Add(new YourPOCO(row));
}
y se podría entonces crear una vista ASP.NET MVC o vistas parciales sobre la base de este tipo "YourPOCO" y utilizar la plantilla "lista" para crear una lista de instancias "YourPOCO" en una lista- como pantalla.
Marc
Gracias por mencionar la lista
vi su otra pregunta acerca del uso de una tabla de datos en la capa de acceso a datos. Si devuelve POCO en algún momento, es una buena idea dejar que su DAL devuelva POCO.
Utilizaría un SqlDataReader para llenar el POCO. Esto es más ligero A veces es más fácil usar DataSet y DataTable para las listas de entradas, pero si transforma las filas en POCOS fuertemente tipeados de todos modos, estoy seguro de que este es el camino a seguir.
pregunta antiguo, de todas formas esto puede ser muy útil para alguien:
private static T CreatePocoObject<T>(DataRow dr) where T : class, new()
{
try
{
T oClass = new T();
Type tClass = typeof (T);
MemberInfo[] methods = tClass.GetMethods();
ArrayList aMethods = new ArrayList();
object[] aoParam = new object[1];
//Get simple SET methods
foreach (MethodInfo method in methods)
{
if (method.DeclaringType == tClass && method.Name.StartsWith("set_"))
aMethods.Add(method);
}
//Invoke each set method with mapped value
for (int i = 0; i < aMethods.Count; i++)
{
try
{
MethodInfo mInvoke = (MethodInfo)aMethods[i];
//Remove "set_" from method name
string sColumn = mInvoke.Name.Remove(0, 4);
//If row contains value for method...
if (dr.Table.Columns.Contains(sColumn))
{
//Get the parameter (always one for a set property)
ParameterInfo[] api = mInvoke.GetParameters();
ParameterInfo pi = api[0];
//Convert value to parameter type
aoParam[0] = Convert.ChangeType(dr[sColumn], pi.ParameterType);
//Invoke the method
mInvoke.Invoke(oClass, aoParam);
}
}
catch
{
System.Diagnostics.Debug.Assert(false, "SetValuesToObject failed to set a value to an object");
}
}
return oClass;
}
catch
{
System.Diagnostics.Debug.Assert(false, "SetValuesToObject failed to create an object");
}
return null;
}
- 1. objeto dateTime en ASP.NET MVC
- 2. ¿Cómo convierto un objeto String en un objeto Hash?
- 3. Cómo usar POCO en la aplicación MVC
- 4. ¿Cómo convierto datos JSON a javascript objeto
- 5. ¿Cómo convierto un objeto Rails DateTime en una cadena XML?
- 6. ¿Cómo convierto un objeto org.w3c.dom.Document en una Cadena?
- 7. ASP.NET MVC/EF4/POCO/Repository - ¿Cómo actualizar las relaciones?
- 8. ASP.NET MVC - Html.Textbox() arroja "Referencia de objeto no establecida en una instancia de un objeto"
- 9. ¿Cómo puedo agrupar los datos en una vista ASP.NET MVC?
- 10. 'Caché' de una tabla grande en ASP.NET
- 11. ¿Cómo convierto un objeto java.sql.Date en un GregorianCalendar?
- 12. ¿Cómo convierto un objeto datetime.date en datetime.datetime en python?
- 13. ¿Cómo se burla del objeto de caché en asp.net mvc?
- 14. ¿Cómo convierto una matriz bidimensional C# a un objeto JSON?
- 15. ¿Cómo convierto una matriz de bytes C# en datos estructurados?
- 16. ¿Cómo convierto RFC822 en un objeto python datetime?
- 17. Tabla paginada con ASP.NET MVC y AJAX
- 18. Exportación de una tabla HTML a Excel desde ASP.NET MVC
- 19. Uso de anotaciones de datos en POCO con MVC para validación remota
- 20. Cómo crear una estructura recursiva en ASP.NET MVC
- 21. cómo devolver un FileResult de una cadena en asp.net mvc
- 22. Fuente de datos de ReportViewer en asp.net-mvc
- 23. Cómo implementar bases de datos de objetos en Asp.net MVC
- 24. ¿Cuál es la mejor manera de convertir un objeto proxy EF en el objeto POCO original?
- 25. Cómo convierto un archivo plano de datos en una fuente de datos consultables
- 26. Cómo convierto un nombre de función en una cadena
- 27. Encuadernación ASP.NET MVC Modelo en una lista
- 28. ASP.Net MVC 3 ViewModel Anotaciones de datos
- 29. ¿Cómo convierto un objeto de matriz en una cadena en PowerShell?
- 30. ¿Cómo pruebo un ActionFilter en ASP.NET MVC?
Es para la visualización en asp.net mvc. Consulte esta pregunta ... http://stackoverflow.com/questions/1353966/datatable-instead-of-entity-framework-in-asp-net-mvc – Josh