Linq to XML Literal中的实体生成“Linq to Entities中只支持无参数构造函数”
问题描述:
我正在尝试为ASP.NET MVC Web应用程序创建动态XML站点地图。基于通过实体框架6模型从数据库检索的数据,页面是结构化和可预测的。我想简单地使用XML文字从数据库中检索每个项目,有点像发生了什么here。Linq 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查询中连接字符串的事实有关,但我不知道另一种方式。有没有这种方式来创建网站地图,或者我问的太多了?
答
我猜测,在.NET级别,由该标记生成的编译表达式太复杂,无法在实体框架内处理(即在SQL语句中)。尝试在db.Blogs
之后添加.ToList()
或.AsEnumerable()
,以强制LINQ语句的其余部分进入LINQ-to-Objects上下文。例如,请避免在Where
子句之前执行.ToList()
,这样可以避免严重的性能损失。注意:您需要确保您了解正在执行的操作,并避免在Where
子句之前执行.ToList()
,这样可以避免严重的性能损失。
我猜测,在.NET级别,由''标记生成的编译表达式太复杂,无法在实体框架内处理(即在SQL语句中)。尝试在db.Blogs之后添加'.ToList()'或'.AsEnumerable()',以强制LINQ语句的其余部分进入LINQ-to-Objects上下文。 –
StriplingWarrior
@StriplingWarrior,加入'.ToList()'实际上确实有效。我没有想到这一点。您能否将您的评论写入完整答案,以便我可以将其标记为正确? –