对于我使用实体框架的第一个项目,我选择使用“模型优先”的方法,其中我设计了我的实体,从中创建一个脚本用于生成所需的数据库表。这一直奏效良好,直到遇到一种情况,我无法在单个查询中检索到我需要的所有数据元素(我的LINQ技能仍然有限)。实体框架 - 混合模型优先和数据库优先的方法?
因为我可以很容易地在SQL中编写我需要的查询,所以我想知道是否可以为我的数据库编写一个视图,然后在它的模型中生成一个实体,换句话说,将两个模型/数据库方法。对此有何想法?
对于我使用实体框架的第一个项目,我选择使用“模型优先”的方法,其中我设计了我的实体,从中创建一个脚本用于生成所需的数据库表。这一直奏效良好,直到遇到一种情况,我无法在单个查询中检索到我需要的所有数据元素(我的LINQ技能仍然有限)。实体框架 - 混合模型优先和数据库优先的方法?
因为我可以很容易地在SQL中编写我需要的查询,所以我想知道是否可以为我的数据库编写一个视图,然后在它的模型中生成一个实体,换句话说,将两个模型/数据库方法。对此有何想法?
您不能混合使用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)或放弃模型第一。
谢谢,它看起来像使用ExecuteStoreQuery()与自定义类将为我做的伎俩。 – PongGod 2011-03-01 16:50:22
不是开箱即用,但有第三方工具可让您混用两种模式。一个可以做到这一点的工具(有选择地引入单个更改)是我的加载项中的EFv4'模型比较器',您可以从http://huagati.com/dbmltools/下载并获得试用许可证。此博客文章更详细地描述了模型比较器(使用显示基本功能的截屏视频):http://huagati.blogspot.com/2010/07/introducing-model-comparer-for-entity.html – KristoferA 2011-03-01 09:45:27