在本文中,我们将为您详细介绍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 – 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无法识别方法”
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
解决方法
但是,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>没有客户端验证
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");
不幸的是,到目前为止,我还没有找到一种方法来利用这些知识.
解决方法
我在渲染输入字段时“手动”注入缺少的data-val- *属性,如下所示:
@Html.TextBoxFor(x => x.FirstName,Html.GetUnobtrusiveValidationAttributes("FirstName"))
由于GetUnobtrusiveValidationAttributes(称为独立)构建正确的HTML属性,我只需将它们添加到TextBox即可.绝对不漂亮,但它有效,我可以继续我的工作.如果有人有更好的解决方案,我会很高兴听到它.
asp.net-mvc – ASP.NET MVC LINQ to SQL或Entities?
但是大多数书籍和示例项目由微软员工使用,使用mvc linq来实现sql.
有一些原因吗?对于POCO,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 =”?
解决方法
Html.ActionLink("Title","Action","Controller",null,new { title = "Title"} )
发布你的代码,如果这不工作。
asp.net-mvc – ASP.NET MVC3 IIS无法获取加载样式表
本主题描述了同样的问题,但修复没有帮助我(我已经选中了“提供静态内容”设置).
ASP.Net MVC & Local IIS Issue Loading Stylesheets
任何方向感谢!
解决方法
今天的关于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无法获取加载样式表的相关知识,请在本站进行查询。
本文标签: