我可能对这里发生的事情有一个基本的误解,但是我在剃须刀视图中遇到了一个循环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风格的东西吗?那似乎......很奇怪?
答案 0 :(得分:43)
您需要在视图顶部添加@using System.Data.Linq
,将名称空间导入视图中。但是,如果您想在所有视图中使用它,则需要将<add namespace="System.Data.Linq" />
添加到Views文件夹中的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>
虽然不能解决您的问题,但您应该尝试将此逻辑移出视图并进入控制器,这将使调试变得更加容易,并且意味着您的演示文稿与业务逻辑分离。
答案 1 :(得分:21)
为我修复的是右键单击System.Data.Linq程序集引用,然后单击属性。在那里将Copy Local设置为true。
答案 2 :(得分:0)
您的Linq-to-Sql datacontext是否存在于Web项目之外(例如,在另一个类库中)?如果是这样,你在那里添加了对该项目的引用,那么所有构建都很好,但是在Razor视图中,你试图直接访问System.Data.Linq
程序集中的类型,而不在Web项目中引用它。尝试添加对主Web项目的引用,看看你得到了什么。
答案 3 :(得分:0)
您需要在项目中和/或System.Data.Linq
中添加对Web.config
的引用。
答案 4 :(得分:0)
我花了数小时去谷歌搜索,没有解决方案,但这是有帮助的...
删除web.config中<assemblies>
元素内的所有内容!
<compilation targetFramework="4.7.2">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<!-- etc etc blah blah -->
</assemblies>
</compilation>
或者在其中添加System.Core
,或者甚至删除所有内容并将其更改为:
<compilation targetFramework="4.7.2"/>
说明
System.Linq命名空间是在System.Core中定义的,对吗?因此,我们要么需要将其添加到<assemblies>
列表中,要么(因为System.Core 始终在您的根web.config 中被引用,该文件位于“%Windir%/ Microsoft.NET / v4 .0.30319 / Framework / whatever“)从<assemblies>
中删除所有内容,以防止发生冲突。