2017-10-19 11 views
0

ASP.NET MVC Webアプリケーションの動的XMLサイトマップを作成しようとしています。このページは、エンティティフレームワーク6モデルによってデータベースから取り出されたデータに基づいて構造化され、予測可能である。私は単純にXMLリテラルを使用してデータベースから各アイテムを検索したいと思います。何のようなものかはhereです。XMLリテラル内のエンティティへのLinqは、 "無引数コンストラクタのみがエンティティへのLinqでサポートされています"

Dim xmlSitemap = <?xml version="1.0" encoding="UTF-8"?> 
       <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
        <url> 
         <loc>https://example.com</loc> 
        </url> 
        <url> 
         <loc>https://example.com/Home/Contact</loc> 
        </url> 
        <%= From blog in db.Blogs Select <url> 
                  <loc>https://example.com/BlogPosts/<%= blog.PostId %></loc> 
                 </url> %> 
       </urlset> 

System.NotSupportedExceptionでこのコードの結果を実行する:

私の文は次のようになります「のみパラメータなしのコンストラクタと初期化子エンティティへのLINQでサポートされている」

Public Sub New()を引数なしで含むようにモデルを変更しても、このエラーを修正することはありません。それを試した後の私の研究に基づいて、私はLinqクエリ内で文字列を連結しているという事実と関連していると推測していますが、私は別の方法を知らない。この方法でサイトマップを作成する方法はありますか、それともあまりにも多くのことを求めていますか?

+0

.NETレベルでは、その「」タグによって生成されたコンパイル済みの式は、Entity Framework(つまりSQL文)内で処理するには複雑すぎると推測しています。 'db.Blogs'の後ろに' .ToList() 'または' .AsEnumerable() 'を追加して、残りのLINQ文をLINQ-to-Objectsコンテキストに強制してください。 – StriplingWarrior

+1

@StriplingWarrior、 '.ToList()'が実際に動作しました。私はそれを考えなかった。あなたは完全な答えにあなたのコメントをすることができますので、私はそれを正しくマークすることができますか? –

答えて

1

.NETレベルでは、そのタグによって生成されたコンパイル済みの式が複雑すぎて、Entity Framework(SQL文など)内で処理できないと思います。 db.Blogsの後に.ToList()または.AsEnumerable()を追加して、残りのLINQステートメントをLINQ-to-Objectsコンテキストに強制してください。

注:たとえば、Where句の前に.ToList()を実行しないように注意してください。重大なパフォーマンスの低下を避けることができます。

関連する問題