Подтвердить что ты не робот

Использование System.Data.Linq в представлении Razor

У меня может быть фундаментальное непонимание того, что здесь происходит, но у меня возникает проблема, проходящая через класс LinqToSQL в моем режиме бритвы:

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

Я получаю следующую ошибку:

Сообщение об ошибке компилятора: CS0012: Тип 'System.Data.Linq.EntitySet`1' определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку "System.Data.Linq, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089".

Я попытался поставить @using System.Data.Linq в начало файла cshtml, но он говорит мне, что Linq не существует в пространстве имен System.Data. Это, очевидно, неверно, и, да, у меня есть system.data.linq как ссылка в моем проекте.

Любые идеи здесь? Необходим ли импорт? Могу ли я просто не делать вещи стиля Linq в своих взглядах на бритву? Это казалось бы... странным?

4b9b3361

Ответ 1

Вам нужно импортировать пространство имен в ваше представление, добавив @using System.Data.Linq вверху вашего представления. Однако, если вы хотите его во всех своих представлениях, вам нужно добавить <add namespace="System.Data.Linq" /> в web.config в папке "Представления":

  <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>

Несмотря на то, что вы не имеете никакого отношения к своему вопросу, вы должны попытаться переместить эту логику из представления и в контроллер, это значительно облегчит отладку и означает, что ваша презентация отделена от вашей бизнес-логики.

Ответ 2

Для меня было исправлено право щелкнуть ссылку на сборку System.Data.Linq, а затем нажать свойства. В этом случае скопируйте Local в true.

Ответ 3

Имеется ли ваш Linq-to-Sql datacontext вне веб-проекта (например, в другой библиотеке классов)? Если это так, где вы добавили ссылку на этот проект, все будет прекрасно, но в представлении Razor вы пытаетесь напрямую получить доступ к типу из сборки System.Data.Linq, не ссылаясь на него в веб-проекте. Попробуйте добавить ссылку на основной веб-проект и посмотреть, что вы получаете.

Ответ 4

Вам нужно добавить ссылку на System.Data.Linq в свой проект и/или в ваш Web.config.