Entity Frameworkクエリで、文字通り何時間も費やした非常に奇妙な問題が発生しています。
クエリを実行すると、例外が発生します。
コンストラクターと初期化子では、プロパティまたはフィールドパラメーターのバインディングのみがLINQtoEntitiesでサポートされます。
説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。
例外の詳細:System.NotSupportedException:コンストラクターと初期化子では、プロパティまたはフィールドパラメーターのバインディングのみがLINQtoEntitiesでサポートされます。
この問題は通常、クエリ内のパラメーターを使用してコンストラクターを呼び出すときに発生することを私は知っています。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;
}
}
私は明らかに、単純なプロパティの割り当て以外は何もしていません。このクエリが失敗するのはなぜですか?