2011-02-28 136 views
3

对于我使用实体框架的第一个项目,我选择使用“模型优先”的方法,其中我设计了我的实体,从中创建一个脚本用于生成所需的数据库表。这一直奏效良好,直到遇到一种情况,我无法在单个查询中检索到我需要的所有数据元素(我的LINQ技能仍然有限)。实体框架 - 混合模型优先和数据库优先的方法?

因为我可以很容易地在SQL中编写我需要的查询,所以我想知道是否可以为我的数据库编写一个视图,然后在它的模型中生成一个实体,换句话说,将两个模型/数据库方法。对此有何想法?

+0

不是开箱即用,但有第三方工具可让您混用两种模式。一个可以做到这一点的工具(有选择地引入单个更改)是我的加载项中的EFv4'模型比较器',您可以从http://huagati.com/dbmltools/下载并获得试用许可证。此博客文章更详细地描述了模型比较器(使用显示基本功能的截屏视频):http://huagati.blogspot.com/2010/07/introducing-model-comparer-for-entity.html – KristoferA 2011-03-01 09:45:27

回答

1

您不能混合使用model-first和db-first。一旦手动修改了数据库,就无法再使用EDMX中的生成数据库,或者直接删除在数据库中执行的更改。

在某些情况下,它可以通过下载Entity Designer Database Generation Power Pack扩展Visual Studio 2010中一起时使用此扩展使用VS 2010高级版或旗舰您可以使用其他数据库生成的工作流程,哪些是能够使用VS工具比较T4模板来避免新生成的数据库与现有的数据库并只创建ALTER脚本。

但是这仍然很可能不适用于数据库视图,因为关于数据库视图的信息存储在SSDL(存储模型描述)中。 Model-first不使用视图,每次重新生成数据库时,都会创建表而不是视图。

所以,如果你想运行任意SQL查询使用ExecuteStoreQuery(只有EF4)或放弃模型第一。

+0

谢谢,它看起来像使用ExecuteStoreQuery()与自定义类将为我做的伎俩。 – PongGod 2011-03-01 16:50:22

1

你知道SqlQuery()方法吗?

ctx.Listings.SqlQuery("SQL Query Here", p1, p2...) 
+0

不,我不是。这是实体框架的一个特点吗? – PongGod 2011-02-28 22:58:05

+0

是的。它会运行一个自定义查询,返回表格的行(在我的例子中是Listings表格),然后将它们映射到所有变化粘合等的对象中。 – 2011-02-28 22:59:36

+0

你有更详细的例子来展示吗?到目前为止,我一直无法找到有关此SqlQuery()方法的任何信息。它属于哪个名称空间? – PongGod 2011-02-28 23:18:04

相关问题