Linq to XML Literal中的实体生成“Linq to Entities中只支持无参数构造函数”

Linq to XML Literal中的实体生成“Linq to Entities中只支持无参数构造函数”

问题描述:

我正在尝试为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()'实际上确实有效。我没有想到这一点。您能否将您的评论写入完整答案,以便我可以将其标记为正确? –

我猜测,在.NET级别,由该标记生成的编译表达式太复杂,无法在实体框架内处理(即在SQL语句中)。尝试在db.Blogs之后添加.ToList().AsEnumerable(),以强制LINQ语句的其余部分进入LINQ-to-Objects上下文。例如,请避免在Where子句之前执行.ToList(),这样可以避免严重的性能损失。注意:您需要确保您了解正在执行的操作,并避免在Where子句之前执行.ToList(),这样可以避免严重的性能损失。