Использование System.Data.Linq в представлении Razor - PullRequest
27 голосов
/ 05 мая 2011

У меня может быть фундаментальное недопонимание того, что здесь происходит, но у меня проблема с циклом просмотра класса 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, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089'.

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

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

Ответы [ 4 ]

44 голосов
/ 06 мая 2011

Вам необходимо импортировать пространство имен в ваше представление, добавив @using System.Data.Linq в верхней части вашего представления. Однако, если вы хотите, чтобы это было во всех ваших представлениях, вам нужно добавить <add namespace="System.Data.Linq" /> в web.config в папке 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>

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

21 голосов
/ 06 апреля 2012

Что для меня исправило, так это щелкнуть правой кнопкой мыши ссылку на сборку System.Data.Linq, а затем нажать «Свойства». Там установите Copy Local в true.

0 голосов
/ 05 мая 2011

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

0 голосов
/ 05 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...