实体框架 - 混合模型优先和数据库优先方法?
对于我使用实体框架的第一个项目,我选择使用“模型优先”方法,其中我设计实体,从中创建脚本来生成所需的数据库表。这种方法一直运行良好,直到我遇到无法在单个查询中完全检索所需的所有数据元素的情况(我的 LINQ 技能仍然有限)。
由于我可以轻松地用 SQL 编写所需的查询,因此我想知道是否可以为我的数据库编写一个视图,然后从中生成模型中的实体,换句话说,混合两种模型/数据库方法。对此有什么想法吗?
For my first project using Entity Framework, I chose to use the "model-first" approach wherein I design my entities from which a script will be created for generating the required database tables. This has worked quite well until I ran into a situation where I couldn't quite retrieve all the data elements I am needing in a single query (my LINQ skills are still limited).
Since I can easily write the query I need in SQL, I was wondering whether it would be possible to write a view for my database and then generate an entity in my model from it, in other words, mixing the two model/database approaches. Any ideas on this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您不能混合模型优先和数据库优先。手动修改数据库后,您将无法再使用从 EDMX 生成数据库,或者删除直接在数据库中执行的更改。
在某些情况下,可以通过下载Entity Designer Database Generation Power Pack Visual Studio 2010 的扩展。当将此扩展与 VS 2010 Premium 或 Ultimate 一起使用时,您可以使用其他数据库生成工作流程和 T4 模板,这些工作流程和 T4 模板能够使用 VS 工具将新生成的数据库与现有数据库进行比较,并仅创建 ALTER 脚本。
但这仍然很可能不适用于数据库视图,因为有关数据库视图的信息存储在 SSDL(存储模型描述)中。模型优先不使用视图,每次重新生成数据库时,它都会创建表而不是视图。
因此,如果您想运行任意 SQL 查询,请使用 ExecuteStoreQuery (仅限 EF4)或者先放弃模型。
You can't mix model-first and db-first. Once you manually modify database you can't use Generate database from EDMX any more or you delete your changes performed directly in DB.
In some cases it can be avoided by downloading Entity Designer Database Generation Power Pack extension to Visual Studio 2010. When using this extension together with VS 2010 Premium or Ultimate you can use additional DB generation workflows and T4 templates which are able to use VS tools to compare newly generated DB with existing DB and create only ALTER scripts.
But still this will most probably not work with DB views because information about DB view is stored in SSDL (storage model description). Model-first doesn't use Views and every time you regenerate database it creates table instead of view.
So if you want to run arbitrary SQL query use ExecuteStoreQuery (only EF4) or give up with model first.
您知道 SqlQuery() 方法吗?
Are you aware of the SqlQuery() method?