У меня очень странная проблема в запросе Entity Framework, на которую я буквально потратил часы.
При выполнении запроса я получаю исключение:
В конструкторах и инициализаторах в LINQ to Entities поддерживаются только привязки параметров свойств или полей.
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: 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;
}
}
Я явно не делаю ничего, кроме простых назначений свойств .Почему этот запрос не выполняется?