Korzystanie Z Systemu.Data.Linq w widoku brzytwy

Może mam fundamentalne nieporozumienie co tu się dzieje, ale mam problem z zapętleniem przez klasę LinqToSQL w moim widoku razor:

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

Dostaję następujący błąd:

Komunikat o błędzie kompilatora: CS0012: Typ ' System.Data.Linq.EntitySet " 1 " jest zdefiniowany w zestawie, do którego się nie odwołuje. Musisz dodać odniesienie do systemu assembly'.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

I tried putting @ using System.Data.Linq na górze pliku cshtml, ale to mi mówi, że Linq nie istnieje w systemie.Przestrzeń nazw danych. To oczywiście nieprawda i tak, mam system.data.linq jako punkt odniesienia w moim projekcie.

Jakieś pomysły? Czy potrzebny jest import? Czy mogę po prostu nie robić rzeczy w stylu Linq w moich poglądach na brzytwę? Na to wygląda....dziwne?
Author: Austin Fatheree, 2011-05-05

4 answers

Musisz zaimportować przestrzeń nazw do widoku, dodając @using System.Data.Linq u góry widoku. Jeśli jednak chcesz mieć go we wszystkich swoich widokach, musisz dodać <add namespace="System.Data.Linq" /> do sieci.config w folderze widoki:

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

Chociaż nie dotyczy to Twojego pytania, naprawdę powinieneś spróbować przenieść tę logikę z widoku i do kontrolera, ułatwi to debugowanie i oznacza, że prezentacja jest oddzielona od logiki biznesowej.

 41
Author: Adam Flanagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-06 08:25:45

Naprawiłem to, klikając prawym przyciskiem myszy System.Data.LINQ assembly reference, następnie hit properties. Tam Ustaw Copy Local na true.

 20
Author: Pedro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-06 16:38:36

Czy twój LINQ-to-SQL datacontext istnieje poza projektem WWW (np. w innej bibliotece klas)? Jeśli tak, to tam, gdzie dodałeś odniesienie do tego projektu, wszystko jest dobrze budowane, ale w widoku Razor próbujesz uzyskać bezpośredni dostęp do typu z System.Data.Linq assembly bez odwoływania się do niego w projekcie sieci web. Spróbuj dodać odniesienie do głównego projektu sieci Web i zobacz, co otrzymasz.

 0
Author: Matthew Abbott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-05 11:26:30

Musisz dodać odniesienie do System.Data.Linq w swoim projekcie i / lub w swoim Web.config.

 0
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-17 14:49:28