对于我使用Entity Framework的第一个项目,我选择使用“模型优先”方法,其中我设计我的实体,从中创建脚本以生成所需的数据库表。这种方法运行得很顺利,直到遇到我无法在单个查询中检索所需的所有数据元素的情况(我的LINQ技能仍然有限)。
由于我可以轻松地在SQL中编写我需要的查询,我想知道是否可以为我的数据库编写一个视图,然后在我的模型中生成一个实体,换句话说,混合两个模型/数据库方法。关于这个的任何想法?
答案 0 :(得分:1)
您是否了解SqlQuery()方法?
ctx.Listings.SqlQuery("SQL Query Here", p1, p2...)
答案 1 :(得分:1)
您不能混合模型优先和数据库优先。手动修改数据库后,您无法再使用EDMX中的Generate数据库,或者删除直接在DB中执行的更改。
在某些情况下,可以通过将Entity Designer Database Generation Power Pack扩展名下载到Visual Studio 2010来避免此问题。将此扩展程序与VS 2010 Premium或Ultimate一起使用时,您可以使用其他数据库生成工作流程和能够使用VS的T4模板用于将新生成的DB与现有DB进行比较并仅创建ALTER脚本的工具。
但是这很可能不适用于DB视图,因为有关DB视图的信息存储在SSDL(存储模型描述)中。 Model-first不使用Views,每次重新生成数据库时都会创建表而不是视图。
因此,如果您想运行任意SQL查询,请使用ExecuteStoreQuery(仅限EF4)或先放弃模型。