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.
1.
Control LinqDataSource
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>
Para
obtener más información, vea Información general sobre el control de servidor web
LinqDataSource.
2.
Control ObjectDataSource
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 SelectMethod, UpdateMethod,
InsertMethod 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
controlObjectDataSource intenta eliminar el contexto de datos después de la
operación Select.
3.
Consultas LINQ
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, veaInformación
general sobre operadores de consulta estándar. Para obtener una lista de los
operadores de consulta que están disponibles en el controlLinqDataSource, 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 controlGridView.
[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();
}
}
4.
LINQ y seguridad de acceso a código
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 confianza Medium. 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"
/>






0 comentarios:
Publicar un comentario