2017-10-19 115 views
0

我正在嘗試爲ASP.NET MVC Web應用程序創建動態XML站點地圖。基於通過實體框架6模型從數據庫檢索的數據,頁面是結構化和可預測的。我想簡單地使用XML文字從數據庫中檢索每個項目,有點像發生了什麼hereLinq to XML Literal中的實體生成「Linq to Entities中只支持無參數構造函數」

我的發言如下所示:

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級別,由''標記生成的編譯表達式太複雜,無法在實體框架內處理(即在SQL語句中)。嘗試在db.Blogs之後添加'.ToList()'或'.AsEnumerable()',以強制LINQ語句的其餘部分進入LINQ-to-Objects上下文。 – StriplingWarrior

+1

@StriplingWarrior,加入'.ToList()'實際上確實有效。我沒有想到這一點。您能否將您的評論寫入完整答案,以便我可以將其標記爲正確? –

回答

1

我猜測,在.NET級別,由該標記生成的編譯表達式太複雜,無法在實體框架內處理(即在SQL語句中)。嘗試在db.Blogs之後添加.ToList().AsEnumerable(),以強制LINQ語句的其餘部分進入LINQ-to-Objects上下文。例如,請避免在Where子句之前執行.ToList(),這樣可以避免嚴重的性能損失。注意:您需要確保您瞭解正在執行的操作,並避免在Where子句之前執行.ToList(),這樣可以避免嚴重的性能損失。

相關問題