GVKun编程网logo

asp.net-mvc – 错误获取记录“LINQ to Entities无法识别方法”

5

在本文中,我们将为您详细介绍asp.net-mvc–错误获取记录“LINQtoEntities无法识别方法”的相关知识,此外,我们还会提供一些关于asp.net-mvc–ASP.NETMVCFluen

在本文中,我们将为您详细介绍asp.net-mvc – 错误获取记录“LINQ to Entities无法识别方法”的相关知识,此外,我们还会提供一些关于asp.net-mvc – ASP.NET MVC FluentValidation PartialView>没有客户端验证、asp.net-mvc – ASP.NET MVC LINQ to SQL或Entities?、asp.net-mvc – ASP.NET MVC – 向ActionLinks添加querystring“length =”?、asp.net-mvc – ASP.NET MVC3 IIS无法获取加载样式表的有用信息。

本文目录一览:

asp.net-mvc – 错误获取记录“LINQ to Entities无法识别方法”

asp.net-mvc – 错误获取记录“LINQ to Entities无法识别方法”

在以下代码中,我试图获取当前登录用户的配置文件.

Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = Membership.GetUser.ProviderUserKey).Single

错误是“LINQ to Entities无法识别方法’System.Object CompareObjectEqual(System.Object,System.Object,Boolean)’方法,并且此方法无法转换为商店表达式.”

有谁知道这有什么问题,还是有更好的方法……而且,我怎样才能使这更安全;即如果没有找到记录则添加条件?

我正在使用VB ASP.NET MVC 3.

谢谢.

编辑:

这是我的新代码:

Dim db1 As UserProfileDbContext = New UserProfileDbContext
        Dim user = Membership.GetUser()
        Dim key As Guid = user.ProviderUserKey
        Dim finalKey = key.ToString
        Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = finalKey).Single
        Dim companyId = userProfile.CompanyId

解决方法

L2E正在尝试将lamba表达式(p)p.UserId = Membership.GetUser.ProviderUserKey呈现给可用于命中数据库的sql表达式.

但是,Membership.GetUser()是一种.NET方法. L2E抱怨它不知道如何将此方法呈现为sql语法.

试试这个:

Dim user = Membership.GetUser()
Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = user.ProviderUserKey).Single

编辑:MembershipUser.ProviderUserKey是一个CLR对象. sql无法比较两个对象,因此您需要在运行表达式之前强类型化它.例如,如果您的用户密钥是字符串:

Dim user = Membership.GetUser()
Dim key as String= user.ProviderUserKey
Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = key).Single

这应该更好,因为L2E可以理解简单的相等表达式=并且可以将其呈现为等效的sql表达式,例如:

SELECT * FROM Profiles WHERE UserId = @Argument,其中@Argument由实体框架提供.

另外,L2E会将链式调用分组到最后,所以表达式如下:

db1.UserProfiles.Skip(10).Take(30).Where(Function(p)p.UserId = Membership.GetUser.ProviderUserKey)

…仍然会失败,因为L2E会将Skip Take和Where组件合并到一个sql表达式中.您可以通过调用ToArray ToList或ToDictionary强制L2E命中服务器.该表达式可以通过将其更改为:

db1.UserProfiles.Skip(10).Take(30).ToArray().Where(Function(p)p.UserId = Membership.GetUser.ProviderUserKey)

ToArray强制执行sql语句,为您提供支持复杂lambas的.NET数组.

asp.net-mvc – ASP.NET MVC FluentValidation PartialView>没有客户端验证

asp.net-mvc – ASP.NET MVC FluentValidation PartialView>没有客户端验证

我使用FluentValidation来验证我的ASP.NET MVC 5.1视图模型(使用默认的不显眼的客户端验证).我通过Ninject注册/创建我的验证器(viewmodels上没有属性):
FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new NinjectValidatorFactory(_kernel));
AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly()).ForEach(match => _kernel.Bind(match.InterfaceType).To(match.ValidatorType));

我有一个在整个应用程序中经常使用的局部视图.此局部视图具有自己的视图模型. “main”视图模型(整个视图的视图模型)只是从这个“部分”视图模型继承而来.

public class Indexviewmodel : PersonalInfoviewmodel { ... }

验证器使用相同的模式:

public class IndexValidator : PersonalInfovalidator { ... }

这工作正常,服务器端验证以及“主”视图上的客户端验证工作.但是不会触发部分视图的客户端验证(输入字段上没有data-val- *属性).

我的“主要”视图Index.cshtml

@model Indexviewmodel
@Html.TextBoxFor(x => x.someProperty) // client-side validation works fine

@Html.Partial("PersonalInfo") // client-side validation in the partial view does not work (see below)

我的部分视图PersonalInfo.cshtml:

@model PersonalInfoviewmodel
@Html.TextBoxFor(x => x.FirstName) // client-side validation does not work

我注意到当我将局部视图的模型更改为“main”viewmodel时它可以工作:

@model Indexviewmodel
@Html.TextBoxFor(x => x.FirstName) // client-side validation works

所以我想在构建客户端验证的某个地方,正确的验证器没有被拾取,并且没有数据-val- *属性被注入到HTML中.但是我无法更改局部视图上的viewmodel,因为它在具有不同“主”视图的几个不同页面上使用(尽管都是从PersonalInfoviewmodel继承).

关于如何在这种情况下使我的客户端验证工作的任何想法?

更新

在挖掘ASP.NET WebStack源几个小时后,我发现问题似乎发生在TextBoxFor方法中.在那里,ModelMetaData是从模型创建的 – 在那里它开始使用Indexviewmodel而不是PersonalInfoviewmodel来获取客户端验证的元数据:

ModelMetadata Metadata = ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData);
Html.GetUnobtrusiveValidationAttributes("FirstName",Metadata); // no client-side validation attributes found

但是,如果我没有明确指定元数据,则会生成正确的客户端验证属性:

Html.GetUnobtrusiveValidationAttributes("FirstName");

不幸的是,到目前为止,我还没有找到一种方法来利用这些知识.

解决方法

我无法为我的问题找到一个很好的解决方案,并且不想再使用ASP.NET WebStack源了,所以我选择了一个丑陋的解决方法:

我在渲染输入字段时“手动”注入缺少的data-val- *属性,如下所示:

@Html.TextBoxFor(x => x.FirstName,Html.GetUnobtrusiveValidationAttributes("FirstName"))

由于GetUnobtrusiveValidationAttributes(称为独立)构建正确的HTML属性,我只需将它们添加到TextBox即可.绝对不漂亮,但它有效,我可以继续我的工作.如果有人有更好的解决方案,我会很高兴听到它.

asp.net-mvc – ASP.NET MVC LINQ to SQL或Entities?

asp.net-mvc – ASP.NET MVC LINQ to SQL或Entities?

当 linq to entities被释放时,每个人都说linq to sql已经死了.

但是大多数书籍和示例项目由微软员工使用,使用mvc linq来实现sql.

有一些原因吗?对于POCO,linq to sql看起来更好,不是吗?

解决方法

Linq to SQL had its origins in a thought experiment. Linq需要一个概念证明,而Linq to sql提供了这一点.

从那时起,许多用户社区(包括a few prominent Microsoft employees)都将Linq to sql作为轻量级sql Server ORM的首选,特别是对于像NerdDinner这样的小型项目.

ADO.NET团队于this post开始了这种愤怒.在其中,他们表示将维护Linq to sql,并根据用户社区反馈添加功能,但实体框架将成为未来数据访问工作的主要焦点.

用户社区中的许多人将此举理解为“Microsoft is killing Linq to SQL”.

微软在disabled the provider model for Linq to SQL by sealing some critical classes时没有帮助,实际上使Linq to sql只能用于sql Server.实体框架将成为multiple data providers的首选ORM.

不幸的是,the Entity Framework seems not quite ready for prime time.

所以这取决于你相信谁.你是否相信许多博主的猜测(他们只是猜测)谁说Linq to sql真的死了,埋没了,或者你相信人们喜欢微软的damien Guard,他们说Linq to SQL has a long life ahead of it?

asp.net-mvc – ASP.NET MVC – 向ActionLinks添加querystring“length =”?

asp.net-mvc – ASP.NET MVC – 向ActionLinks添加querystring“length =”?

我有一些ActionLinks,当渲染时,获得一个长度键/值,它显示为控制器名称的字符数。怎么可以删除?

解决方法

在猜测中,您可能使用了Html.ActionLink的错误重载,并添加了路由参数而不是HTML属性。您需要在指定HTML属性之前添加一个NULL作为第四个参数。就像是:
Html.ActionLink("Title","Action","Controller",null,new { title = "Title"} )

发布你的代码,如果这不工作。

asp.net-mvc – ASP.NET MVC3 IIS无法获取加载样式表

asp.net-mvc – ASP.NET MVC3 IIS无法获取加载样式表

在运行默认的“File / New”MVC3网站时,无法让本地II7加载样式表.当我使用Visual Studio运行网站时,一切都会很好.我创建了一个指向MVC网站根文件夹的IIS7网站.该网站出现,但没有样式表加载.我的应用程序池设置为.NET 4和集成模式.

本主题描述了同样的问题,但修复没有帮助我(我已经选中了“提供静态内容”设置).

ASP.Net MVC & Local IIS Issue Loading Stylesheets

任何方向感谢!

解决方法

这是通过在IIS中启用匿名身份验证,然后右键单击该节点并选择“编辑”并选择“应用程序池标识”来解决的.一切正在加载正确.随着提琴手,我注意到我在样式表/ js文件上收到401错误,所以我知道我有一个安全问题.

今天的关于asp.net-mvc – 错误获取记录“LINQ to Entities无法识别方法”的分享已经结束,谢谢您的关注,如果想了解更多关于asp.net-mvc – ASP.NET MVC FluentValidation PartialView>没有客户端验证、asp.net-mvc – ASP.NET MVC LINQ to SQL或Entities?、asp.net-mvc – ASP.NET MVC – 向ActionLinks添加querystring“length =”?、asp.net-mvc – ASP.NET MVC3 IIS无法获取加载样式表的相关知识,请在本站进行查询。

本文标签: