martes, 7 de enero de 2014

LINQ con ASP.NET

Usar LINQ con ASP.NET

Puede utilizar Language-Integrated Query (LINQ) en páginas web para recuperar y modificar datos. LINQ aplica los principios de la programación orientada a objetos a los datos relacionales. Proporciona un modelo de programación unificado para realizar consultas de datos de tipos diferentes de orígenes de datos y extiende directamente las funciones de datos de los lenguajes C# y Visual Basic. Para obtener más información, vea LINQ (Language-Integrated Query).
Puede utilizar LINQ mediante el control LinqDataSource, mediante el control ObjectDataSource o creando consultas LINQ.
Si utiliza LINQ en una aplicación web, es posible que deba cambiar los archivos de directivas para la seguridad de acceso del código. Estos cambios se describen más adelante en este tema.
El control LinqDataSource proporciona una manera fácil de conectar a los datos de una base de datos o a una recolección de datos en memoria como una matriz. Puede escribir mediante declaración todas las condiciones necesarias para los escenarios típicos como la recuperación, filtrado, clasificación y agrupación de datos. El control crea dinámicamente las consultas LINQ a partir de los valores proporcionados mediante declaración.
Al recuperar datos de una clase de contexto de datos LINQ to SQL, también puede configurar un control LinqDataSource para administrar las operaciones de actualización, inserción y eliminación. El control realiza estas tareas sin requerir que se escriban comandos SQL para ello.
Para mostrar los datos en una página web, enlace un control enlazado a datos al control LinqDataSource. Los controles GridView y DetailsView son ejemplos de controles enlazados a datos.
En el ejemplo siguiente se muestra el marcado de un control LinqDataSource que conecta con la base de datos AdventureWorks. Devuelve los registros de la tabla Contact cuya propiedad EmailPromotion tiene un valor igual a 1.
<asp:LinqDataSource 
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    Where="EmailPromotion=1"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
El control ObjectDataSource se utiliza cuando se desea interactuar con los datos de una manera más compleja que la que permite el control LinqDataSource. Por ejemplo, puede crear un método de actualización que permita establecer valores en tablas combinadas.
El control ObjectDataSource se puede utilizar con una clase LINQ to SQL. Para ello, se establece la propiedad TypeName en el nombre de la clase de contexto de datos.También se establecen los métodos SelectMethodUpdateMethodInsertMethod y DeleteMethod en los métodos de la clase de contexto de datos que realizan las operaciones correspondientes.
Si utiliza la ejecución diferida de consultas con el control ObjectDataSource, debe crear un controlador de eventos para el evento ObjectDisposing con el fin de cancelar la eliminación de la clase de contexto de datos. Este paso es necesario porque LINQ to SQL admite la ejecución diferida, mientras que el control ObjectDataSource intenta eliminar el contexto de datos después de la operación Select.
Puede incluir consultas LINQ en una página web sin utilizar un control de origen de datos. Puede utilizar una consulta LINQ si necesita utilizar un operador de consulta que no está disponible en el control LinqDataSource. También puede utilizarlo si desea mostrar datos de sólo lectura en un control enlazado a datos sin el procesamiento necesario para crear un control de origen de datos. Para obtener más información sobre los operadores de LINQ, vea Información general sobre operadores de consulta estándar. Para obtener una lista de los operadores de consulta que están disponibles en el control LinqDataSource, vea Información general sobre el control de servidor web LinqDataSource.
En el ejemplo siguiente se muestra cómo incluir una consulta LINQ en una página web. El ejemplo muestra los resultados de la consulta en un control GridView.
[Visual Basic]
Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim dataContext As AdventureWorksDataContext = _
            New AdventureWorksDataContext()
        Dim query = From contact In dataContext.Contacts _
          Where contact.EmailPromotion = 1 _
          Select contact

        GridView1.DataSource = query
        GridView1.DataBind()
    End If
End Sub
[C#]
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        AdventureWorksDataContext dataContext = 
            new AdventureWorksDataContext();

        var query = from contact in dataContext.Contacts
          where contact.EmailPromotion==1
          select contact;

        GridView1.DataSource = query;
        GridView1.DataBind();
    }
}
En las secciones siguientes se proporciona información sobre cómo utilizar LINQ con un nivel de confianza medio y con un nivel de confianza alto.

Utilizar LINQ con un nivel de confianza medio

Para utilizar LINQ en una aplicación web que se ejecuta con un nivel de confianza medio, debe incluir dos elementos en el archivo de directivas definido para la confianzaMedium. De forma predeterminada, el archivo web_mediumtrust.config es el archivo de directivas del nivel de confianza medio y estos elementos se instalan en el archivo.
En el elemento SecurityClasses, LINQ requiere un elemento SecurityClass con los siguientes atributos:
<SecurityClass 
  Name="ReflectionPermission" 
  Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
En el elemento PermissionSet cuyo atributo Name está establecido en "ASP.Net", LINQ requiere un elemento IPermission con los siguientes atributos:
<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="RestrictedMemberAccess"
/>

Utilizar LINQ con un nivel de confianza alto

Para utilizar LINQ en una aplicación web que se ejecuta con un nivel de confianza alto, debe incluir un elemento en el archivo de directivas definido para la confianza High.De forma predeterminada, el archivo web_hightrust.config es el archivo de directivas del nivel de confianza alto y este elemento se instala en el archivo.
Dentro del elemento PermissionSet que tiene el atributo Name establecido en "ASP.Net", el elemento IPermission de ReflectionPermission. En el ejemplo siguiente se muestra la configuración necesaria para LINQ:
<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="ReflectionEmit, RestrictedMemberAccess"
/>

No hay comentarios:

Publicar un comentario