update net mvc consulta asp linq-to-sql asp.net-mvc-3 razor

linq-to-sql - net - mvc c# sql server



Usar System.Data.Linq en una vista Razor (4)

Es posible que tenga un malentendido fundamental de lo que está sucediendo aquí, pero estoy teniendo un problema al recorrer una clase LinqToSQL en mi vista de afeitar:

<h3>Owners</h3> @foreach (var ThisOwner in Prop.PropertyOwnerships.Where(p=p.bIsOwner.Value==true)) { <div class="ODEditEntry"> ...

Me aparece el siguiente error:

Mensaje de error del compilador: CS0012: el tipo ''System.Data.Linq.EntitySet`1'' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ''System.Data.Linq, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089''.

Intenté poner @using System.Data.Linq en la parte superior del archivo cshtml pero me dice que Linq no existe en el espacio de nombres System.Data. Esto obviamente no es cierto y, sí, tengo system.data.linq como referencia en mi proyecto.

¿Alguna idea aquí? Es una importación necesaria? ¿Puedo simplemente no hacer cosas de estilo Linq en mis vistas de afeitar? Eso parece ... extraño?


¿Su datacontext Linq-to-Sql existe fuera del proyecto web (por ejemplo, en otra biblioteca de clases)? Si es así, donde ha agregado una referencia a ese proyecto, todo se compila correctamente, pero en la vista Razor está intentando acceder directamente a un tipo del ensamblado System.Data.Linq sin hacer referencia a él en el proyecto web. Intente agregar la referencia al proyecto web principal y vea lo que obtiene.


Debe agregar una referencia a System.Data.Linq en su proyecto y / o en su Web.config .


Lo que me solucionó fue hacer clic con el botón derecho en la referencia de ensamblado System.Data.Linq y luego presionar Propiedades. Allí establece Copy Local en true.


@using System.Data.Linq importar el espacio de nombres en su vista agregando @using System.Data.Linq en la parte superior de su vista. Sin embargo, si lo quiere en todas sus vistas, entonces necesita agregar <add namespace="System.Data.Linq" /> al web.config en su carpeta Views:

<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="System.Data.Linq" /> </namespaces> </pages> </system.web.webPages.razor>

Aunque no es relevante para su pregunta, realmente debe tratar de mover esta lógica fuera de la vista y hacia el controlador, esto hará que las cosas sean mucho más fáciles de depurar y significa que su presentación está separada de su lógica comercial.