Microsoft Enterprise Library 6.0

Posted on 29 of julio, 2015 by admin in C# & VB.net, Uncategorized

La Microsoft Enterprise Library 5.0 es la nueva versión de esta popular librería que Microsoft desarrollo con todas las mejores prácticas. En ella encontramos espacios de nombres que nos facilitan la vida. Como desarrollador muchas veces estamos reinventado la rueda envés de utilizar librerías para agilizar el desarrollo de nuestras aplicaciones. Utilizar librerías como estas nos garantiza no tener errores a la hora de pasar a qua nuestras app ya que estas están compuestas por código que ya asido sometido a pruebas y ha sido depurados.

1. Implementación
Para implementar necesitamos bajar y agregar las dlls a nuestro proyecto descargamos la ME Library 5.0 de la página oficial de Microsoft o del nuget el link es:
http://www.microsoft.com/en-us/download/details.aspx?id=15104
Luego de descargar la ME Library 5.0 creamos un proyecto window para realizar el ejemplo.
Adicionamos las siguientes configuraciones en el App.config:


<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<configSections>
<section name=”loggingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral,PublicKeyToken=null” requirePermission=”true”/>
<section name=”dataConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral,PublicKeyToken=null” requirePermission=”true”/>
</configSections>
<dataConfiguration defaultDatabase=”connection”/>
<startup>
<supportedRuntime version=”v4.0″ sku=”.NETFramework,Version=v4.5″/>
</startup>
<connectionStrings>
<add name=”connection” connectionString=”data source=STL-DEV05\SQL2012A,28325;initial catalog=Dev_Global_LoadData;persist security info=True;user id=Developer05;password=Developer05;” providerName=”System.Data.EntityClient”/>
</connectionStrings>
<runtime>
<assemblyBinding xmlns=”urn:schemas-microsoft-com:asm.v1″>
<qualifyAssembly partialName=”Microsoft.Practices.EnterpriseLibrary.Data” fullName=”Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null”/>
</assemblyBinding>
</runtime>
</configuration>

Luego damos click derecho en referencias y adicionamos las dlls

Microsoft.Practices.EnterpriseLibrary.Data;

Microsoft.Practices.EnterpriseLibrary.Logging;

Ahora creamos la clase que mapeara la data que traeremos de la base de datos, eh escogido una tabla de prueba llamada EN_CONTACT_STATUS.

Ahora adicionamos la referencia System.Runtime.Serialization para poder adicionar los siguientes atributos a nuestra clase EN_CONTACT_STATUS. La clase se vera de esta forma:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Runtime.Serialization;
using System.Data;
using System.Data.SqlClient;

namespace com.jprograming
{
[DataObject]
[Serializable]
[DataContract]
public partial class EN_CONTACT_STATUS
{

#region constant
public static readonly string TABLE_NAME = “[Entity].[EN_CONTACT_STATUS]”;
#endregion

#region property

[DataMember]
public Int32 Status_Id { get; set; }
[DataMember]
public String Status_Desc { get; set; }
[DataMember]
public DateTime Create_Date { get; set; }
[DataMember]
public DateTime? Modi_Date { get; set; }
[DataMember]
public Int32 Create_UsrId { get; set; }
[DataMember]
public Int32? Modi_UsrId { get; set; }
[DataMember]
public String Hostname { get; set; }

#endregion

#region mapping methods

protected void MapTo(DataSet ds)
{
DataRow dr;
if (ds == null)
ds = new DataSet();
if (ds.Tables[“TABLE_NAME”] == null)
ds.Tables.Add(TABLE_NAME);
ds.Tables[TABLE_NAME].Columns.Add(“Status_Id”, typeof(System.Int32));
ds.Tables[TABLE_NAME].Columns.Add(“Status_Desc”, typeof(System.String));
ds.Tables[TABLE_NAME].Columns.Add(“Create_Date”, typeof(System.DateTime));
ds.Tables[TABLE_NAME].Columns.Add(“Modi_Date”, typeof(System.DateTime?));
ds.Tables[TABLE_NAME].Columns.Add(“Create_UsrId”, typeof(System.Int32));
ds.Tables[TABLE_NAME].Columns.Add(“Modi_UsrId”, typeof(System.Int32));
ds.Tables[TABLE_NAME].Columns.Add(“Hostname”, typeof(System.String));

dr = ds.Tables[TABLE_NAME].NewRow();

dr[“Status_Id”] = Status_Id;
dr[“Status_Desc”] = Status_Desc;
dr[“Create_Date”] = Create_Date;
dr[“Modi_Date”] = Modi_Date;
dr[“Create_UsrId”] = Create_UsrId;
dr[“Modi_UsrId”] = Modi_UsrId;
dr[“Hostname”] = Hostname;

ds.Tables[TABLE_NAME].Rows.Add(dr);

}

#endregion

}
}

 

Ahora creamos nuestra clase DAL DALEN_CONTACT_STATUS de la siguiente forma:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using System.ComponentModel;
using System.Data.Common;

namespace com.jprograming
{
public class DALEN_CONTACT_STATUS
{

#region mapping methods

private static EN_CONTACT_STATUS ReadReader(IDataReader objReader)
{
EN_CONTACT_STATUS instance = new EN_CONTACT_STATUS();
bool isnull = true;
while (objReader.Read())
{
isnull = false;
instance.Status_Id = objReader[“Status_Id”] != DBNull.Value ?
Convert.ToInt32(objReader[“Status_Id”]) : instance.Status_Id = 0;
instance.Status_Desc = objReader[“Status_Desc”] != DBNull.Value ?
Convert.ToString(objReader[“Status_Desc”]) : instance.Status_Desc = null;
instance.Create_Date = objReader[“Create_Date”] != DBNull.Value ?
Convert.ToDateTime(objReader[“Create_Date”]) : instance.Create_Date = DateTime.Now;
instance.Modi_Date = objReader[“Modi_Date”] != DBNull.Value ?
Convert.ToDateTime(objReader[“Modi_Date”]) : instance.Modi_Date = null;
instance.Create_UsrId = objReader[“Create_UsrId”] != DBNull.Value ?
Convert.ToInt32(objReader[“Create_UsrId”]) : instance.Create_UsrId = 0;
instance.Modi_UsrId = objReader[“Modi_UsrId”] != DBNull.Value ?
Convert.ToInt32(objReader[“Modi_UsrId”]) : instance.Modi_UsrId = null;
instance.Hostname = objReader[“Hostname”] != DBNull.Value ?
Convert.ToString(objReader[“Hostname”]) : instance.Hostname = null;

}
if (isnull) return null;
else return instance;
}
//
private static List<EN_CONTACT_STATUS> ReadReaders(IDataReader objReader)
{
List<EN_CONTACT_STATUS> instances = new List<EN_CONTACT_STATUS>();
EN_CONTACT_STATUS instance;
bool isnull = true;
while (objReader.Read())
{
isnull = false;
instance = new EN_CONTACT_STATUS();
instance.Status_Id = objReader[“Status_Id”] != DBNull.Value ?
Convert.ToInt32(objReader[“Status_Id”]) : instance.Status_Id = 0;
instance.Status_Desc = objReader[“Status_Desc”] != DBNull.Value ?
Convert.ToString(objReader[“Status_Desc”]) : instance.Status_Desc = null;
instance.Create_Date = objReader[“Create_Date”] != DBNull.Value ?
Convert.ToDateTime(objReader[“Create_Date”]) : instance.Create_Date = DateTime.Now;
instance.Modi_Date = objReader[“Modi_Date”] != DBNull.Value ?
Convert.ToDateTime(objReader[“Modi_Date”]) : instance.Modi_Date = null;
instance.Create_UsrId = objReader[“Create_UsrId”] != DBNull.Value ?
Convert.ToInt32(objReader[“Create_UsrId”]) : instance.Create_UsrId = 0;
instance.Modi_UsrId = objReader[“Modi_UsrId”] != DBNull.Value ?
Convert.ToInt32(objReader[“Modi_UsrId”]) : instance.Modi_UsrId = null;
instance.Hostname = objReader[“Hostname”] != DBNull.Value ?
Convert.ToString(objReader[“Hostname”]) : instance.Hostname = null;

instances.Add(instance);

}
if (isnull) return null;
else return instances;
}

#endregion

#region CRUD Methods

[DataObjectMethodAttribute(DataObjectMethodType.Select, false)]
public static EN_CONTACT_STATUS Get(System.Int32 Status_Id)
{
SqlDatabase db;
string sqlCommand;
DbCommand dbCommand;
EN_CONTACT_STATUS instance = null;

db = new SqlDatabase(System.Configuration.ConfigurationManager.ConnectionStrings[“connection”].ConnectionString);

sqlCommand = string.Format(“SELECT * FROM [Entity].[EN_CONTACT_STATUS] where Status_Id = {0}”,Status_Id);
dbCommand = db.GetSqlStringCommand(sqlCommand);

// Get results.
using (IDataReader objReader = db.ExecuteReader(dbCommand))
{
instance = ReadReader(objReader);
}
return instance;
}

[DataObjectMethodAttribute(DataObjectMethodType.Select, false)]
public static List<EN_CONTACT_STATUS> Get()
{
SqlDatabase db;
string sqlCommand;
DbCommand dbCommand;
List<EN_CONTACT_STATUS> instance = null;

db = new SqlDatabase(System.Configuration.ConfigurationManager.ConnectionStrings[“connection”].ConnectionString);

sqlCommand = string.Format(“SELECT * FROM [Entity].[EN_CONTACT_STATUS]”);
dbCommand = db.GetSqlStringCommand(sqlCommand);

// Get results.
using (IDataReader objReader = db.ExecuteReader(dbCommand))
{
instance = ReadReaders(objReader);
}
return instance;
}

#endregion

}
}


A continuación creamos un form ui:
ui2

Ahora programamos el btn execute:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace com.jprograming
{
public partial class Ejemplo01 : Form
{

public Ejemplo01()
{
InitializeComponent();
}

private void Ejemplo01_Load(object sender, EventArgs e)
{

}

private void btnExecute_Click(object sender, EventArgs e)
{
try
{
int Status_Id = (this.txtStatus_Id.Text == “” ? 0 : Convert.ToInt16(txtStatus_Id.Text));

if (Status_Id == 0)
{
datagvResult.DataSource = DALEN_CONTACT_STATUS.Get();
}
else {
List<EN_CONTACT_STATUS> lst = new List<EN_CONTACT_STATUS>();
lst.Add(DALEN_CONTACT_STATUS.Get(Status_Id));
datagvResult.DataSource = lst;
}

}
catch (Exception ex)
{

throw new Exception(ex.Message);
}

}

}
}

En conclusión de esta forma podemos acceder a la base de datos de una forma más rápida sin necesidad de tener que escribir todo el código necesario para esto, sin riesgos a de cometer errors.

Link Ejemplo