【发布时间】:2011-09-30 08:52:10
【问题描述】:
我在实体框架查询中遇到了一个非常奇怪的问题,我确实花了几个小时。
执行查询时出现异常:
在构造函数和初始化程序中,LINQ to Entities 仅支持属性或字段参数绑定。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NotSupportedException:在构造函数和初始化程序中,LINQ to Entities 中仅支持属性或字段参数绑定。
我知道当您在查询中调用 带参数的构造函数 时,通常会出现此问题。这是很自然的,因为 LINQ to Entities 无法知道那里发生了什么。
但是,我的查询仅使用对象初始化器语法来填充值,并且我假设将调用默认的无参数构造函数:
private static readonly Func<MyEntities, int, MessageParty> _getUserMessagePartyQuery = CompiledQuery.Compile(
( MyEntities ctx, int id ) =>
ctx.Users
.Where( u => u.ID == id )
.Select( u => new {
u, up = u.UserProfile, img = u.UserProfile.Image
})
.Select( info => new MessageParty
{
PartyID = id,
Title = info.u.FullName,
// Assignment below causes the failure:
Image = {
Image = info.img,
ExternalUrl = info.up.ExternalProfileImageUrl
},
} ).First()
);
重新迭代,导致失败的部分是:
Image = {
Image = info.img,
ExternalUrl = info.up.ExternalProfileImageUrl
}
Image是ImageInfo类型的属性,是超级简单的类:
public class ImageInfo
{
public Model.Image Image
{
get;
set;
}
public string ExternalUrl
{
get;
set;
}
}
我显然 除了简单的属性分配之外没有做任何其他事情。为什么这个查询会失败?
【问题讨论】:
标签: c# entity-framework entity-framework-4 linq-to-entities object-initializers