实体框架查看模型的强大工具提示(我依赖的功能!)yabo官网

当首先使用实体框架的代码和DbContext类定义模型时,yabo官网我找到了视图模型实体框架的功能是动力工具必不可少的。yabo官网没有它,我只是*认为*我知道我告诉EF我的模型应该是什么,但我真的不知道代码如何首先解释我提供的信息(类结构,DbSets,配置)。

例如,我可能有一组类,但一个DbContext只指定一个DbSet:

公共客户服务上下文:dbContext{公共DbSet
         
          顾客得到;设置;}
         

但是,由于客户与其他类型的关系以及他们与其他类型的关系,使用它的基本规则(约定)代码首先将整个模型解释为

形象

映射混淆的另一个共同点是关系。能够可视化代码如何首先解释模型,可以告诉我在哪里,例如,我试图定义一种1:1的关系,但事实上,我已经定义了一个1:0..1,它将在我的应用程序中真正产生问题。

我使用这个工具来显示我在哪里没有正确配置东西,并修复我的映射(通过约定或配置),直到视觉模型符合我的意图。

所以没有这个工具我真的活不下去,我把它展示给所有我能展示的人。

目前,该工具是作为Visual Studio的扩展安装的。它叫实体框架电动工具测试版3yabo官网而且它甚至可以在最新的vs更新中工作(Visual Studio 2012更新2)。

虽然还有其他功能,安装工具后,可以指向从dbContext继承的任何类,右键单击并查看“实体框架”yabo官网在上下文菜单上。选择实体框架,您将看到四个选项。yabo官网我的重点是第一个“视图实体数据模型(只读)”。

SnAGHTMLB066D0B

但有一半的时间我展示它,它不起作用,而且总是我做错了什么,忘记了什么。

设计问题!=建模问题

如果你的模型有问题,您将在output窗口中得到一条有用的错误消息。这是关于映射的问题。一个常见的问题是,您试图创建一对一的映射,但没有给代码足够的细节(例如它需要知道哪个是主体,哪个是从属的)。

然而,这篇博文的重点是我在获取执行它的任务的工具时遇到的问题。

设计器失败的最常见原因:找不到连接字符串

即使设计人员不会通过触摸数据库来生成视图,它仍然需要访问连接字符串。

但是当它找不到的时候,它并不总是告诉您它找不到连接字符串。

通常我会收到一条错误信息,上面写着:序列不包含匹配的元素。

另一个是“调用的目标引发了异常”。

设计器在解决方案的启动项目中查找连接字符串

这是设计师不能工作的首要原因。这有点痛苦,因为你不想为设计师设计,但是对于调试模式。启动项目是否可执行并不重要。它只是一个带有配置文件的项目,在配置文件中,ef将查找的有效连接信息(实体框架部分中的连接字符串或连接信息)。yabo官网

设计器不会查看解决方案或项目文件夹

这就是设计师不工作的原因。我喜欢组织我的解决方案。我将项目组织到解决方案文件夹中,并将代码组织到项目文件夹中。如果配置文件在文件夹中,设计师找不到。

我成功的典型设置

所以我在我的解决方案中有一个单独的项目,它不在一个文件夹中,只是为了帮助我使用这个关键的设计工具。感谢Vaughn Vernon帮助我为这个项目找到了一个比我之前使用的更好的名字,这让我很清楚地认识到这与我的应用程序完全无关。

形象

所以当我需要查看模型时,只要我记得在我的解决方案中将这个项目设置为启动项目,设计师能胜任这项工作。下面是一个将其用于甚至不直接继承DbContext的上下文的例子。它继承自我自己的类“baseContext”它继承自DbContext。即使有了这个额外的抽象,设计师也能向我展示视觉模型。

SNAGHTMLb07a092

另一个与连接字符串无关的奇怪错误:“一个可构造类型……”

感谢伊桑在评论中指出了这一点。事实上,我在写这篇文章的前一天就已经忘记了(短期记忆问题…年老…借口)。

“在所选文件中找不到从dbContext派生的可构造类型。”

这是误导,因为像伊桑一样,我从baseContext派生的事实使我相信,*this*是无法找到dbContext类型的原因。但是,将CustomerServiceContext更改为直接继承dbContext并没有解决我的问题。

我发现这个StackOverflow线程关于此错误消息以及来自的响应布莱斯·兰伯森问题出在提出Visual Studio扩展的EF团队。我刚添加了两个扩展名来检查我的代码和注释。一个是HTML拼写检查器(来自Microsoft)另一个是多语言拼写检查程序(也来自微软的某个人)。所以我想我应该一次禁用一个,看看是不是罪魁祸首。我碰巧选择了HTML拼写检查器先禁用,瞧,视图实体数据模型工具再次工作(在vs重新启动之后)。幸运的是,第二个扩展是我真正想要的。我相信这个问题将在我们在EF6中集成工具时得到解决。

报名参加我的时事通讯所以你不会错过我的会议和多元化视野课程公告!

36“思考”实体框架查看模型的强大工具提示(我依赖的功能!)yabo官网

  1. 好啊,获取“在所选文件中找不到从dbContext派生的可构造类型”。我不明白。我试图映射的上下文派生自我的baseContext,而基上下文派生自dbContext。

  2. 哈哈。不,我只安装了两个,所以我禁用的第一个就成功了。不过我还是很怀疑。我不喜欢这样的巧合。是那个特殊的扩展还是关于“安装”扩展的问题?

  3. 我在让EFPowertoolsBeta3的视图实体数据模型(只读)功能与VS2010一起工作时遇到了问题。我解决了“在所选文件中找不到从dbContext派生的可构造类型”禁用所有其他vs扩展时出错。然后我开始收到错误,比如“找不到‘entityFramework’元素的模式信息”。事实证明,当您首先从数据库执行反向工程代码时,ef pt beta3会将entityframework.dll版本6.0.0安装到空项目中。当您稍后尝试查看DBContext的实体数据模型(只读)时,只读EDMX文件是使用EDMX version 3的模式构建的,该模式兼容VS2012,但不兼容VS2010。在我的项目中,我使用Nuget将Entity Framework 6.0.0替换为最新的稳定版本(4.4.0)。yabo官网现在使用模式版本2创建临时EDMX文件,它与VS2010一起工作。希望这对那些仍然使用VS2010的人有所帮助。

    PS -在Julie的Pluralsight课程中学习了这个工具-在企业应用中使用EF。伟大的东西!

  4. 首先……好消息,朱莉。自从我在Pluralsight上发现你的EF课程后就一直在关注你。其次,如果我告诉您,关闭VS和删除.suo文件可以帮助我处理“异常已被调用的目标抛出”的情况,那会怎么样?我实现了对dbcontext的所有建议,每当我更改模型并尝试查看EDMX时,都会显示此消息。

    尚未测试,但可能不需要删除SUO文件。只是想让你们知道。

  5. 我创建了一个MVC 5应用程序,然后首先使用EF6.1代码和SQL Server Express上的现有数据库。当我试图创建视图时,我正在使用“新脚手架项目…”然后选择“带视图的MVC 5控制器,使用实体框架。”yabo官网我选择模型和上下文类,然后单击OK。然后出现以下错误消息,并且没有创建任何代码。我卸载了EF Power Tools,但出现了相同的错误。

    错误
    运行选定的代码生成器时出错:
    异常已被调用的目标抛出。

    关于什么可能导致这个错误还有其他想法吗?

  6. 嗨,托尼,

    我也有同样的问题。你能修好这个吗?
    我正在运行带有更新2的Visual Studio 2013。

  7. 不,我还没有尝试过EF 6.1设计器。我确实设法通过注释掉每个SO助手在onModelCreating()函数中的代码来让脚手架工作。

    谢谢你的帮助。

  8. 好听的,托尼。尽管我不需要那个黑客。看来脚手架就是不懂流利的配置。我的猜测是(现在没有时间做实验)这并不是由power工具创建的上下文,但是,Fluent配置代码的存在造成了冲突。您是否必须使用与EF6.1设计器创建的上下文相同的解决方案?

  9. 我现在正在使用VS2013,无法找到EF电动工具安装了。我过去一直用它。现在制作实体数据模型图的最佳方法是什么?

  10. 我无法使用Power Tools来解决这个错误,我非常希望能够查看我的数据模型。

    错误消息:在所选文件中找不到从dbContext派生的可构造类型。

    我读过,在这条线和其他一些线中,这个错误可能与VS扩展有关,禁用一些扩展可以解决这个问题。不能禁用vs中的许多当前扩展。在描述中说“您需要使用Windows控制面板中的程序和特性窗格来删除此扩展。”然而,我无法在控制面板中看到这些。我在StackOverflow上找到一篇文章,建议禁用PowerShell。由于我对PowerShell的唯一体验仅限于在包控制台中使用它来测试某些代码优先迁移,我想在我提出更多问题之前,我会寻求一些建议。

    扩展目前在VS:
    以下是扩展和更新中列出的项目:
    行为SDK (XAML)
    实体框架Power Tools Beta 4yabo官网
    微软广告公共中心服务为Visual Studio
    用于Windows 8.1的Microsoft广告SDK
    用于Windows Phone 8.1 XAML的Microsoft广告SDK
    Microsoft ASP.NET和Web工具
    Microsoft Visual Studio ASP.NET MVC 5脚手架
    NuGet软件包管理器的Visual Studio 2013
    目视F 3.1
    用于JavaScript的Windows库的Visual Studio扩展
    Windows Phone 8.1 SDK集成
    工作流管理器活动

    我用的是VS Premium 2013
    EF但是
    EF电动工具测试版4

    有什么建议吗?

  11. 朱莉

    我已经创建了一个示例解决方案来缩小这个范围…
    我正在研究一个具有多个有界上下文的解决方案,正如你所描述的。
    我将实体与它们的模型放在不同的项目中。

    我的解决方案,我有:

    Foo -实体
    foo.模型-参考foo,实体框架yabo官网
    –fooContext:dbContext

    酒吧——实体
    条形图模型-参考条形图,实体框架yabo官网
    - BarContext: DbContext

    启动
    - App.CONFIG

    当我第一次启动Visual Studio(2012/2013)时,我选择从code-first中查看实体数据模型(只读)的第一个DB上下文成功地做到了这一点。之后,任何数据库上下文都无法查看实体数据模型(只读),我得到一个错误消息框,显示“找不到文件或程序集”[各自的实体项目名称],版本1.0.0.0,Culture-neutral,publickeytoken=null'或其依赖项之一。系统找不到指定的文件。“我必须重新启动Visual Studio以获取EF Power Tools以查看其他实体数据模型(只读)。这真的很不方便。

    也,奇怪的是,如果未能查看实体数据模型(只读)的DB上下文是IdentityContext,我没有得到一个错误对话框,但输出中有一条注释:“在所选文件中找不到从dbContext派生的可构造类型。”

    如果我将实体移动到模型项目中,一切都好,但现在我的实体并不是实体框架的不可知论者。yabo官网

    我禁用了所有可以禁用的扩展。我正在使用EF 6.1.1和EF电动工具Beta 4。

    你有过这样的经历吗?有没有一种解决方案不会影响我的解决方案设计?我是不是给自己挖了个不必要的洞?

    我在互联网上搜索了很多有用的解决方案。

    1. 嘿,Matt,
      啊,这个问题我一时想不起来。我从未被强迫将我的域类移动到与我使用这个工具的上下文相同的项目中。我经常进行这种设置。我想你需要有人和你一起看。也,对错过你的评论深表歉意。我知道已经3周了,希望你们已经解决了这个问题,我很想知道问题和解决方案是什么。

  12. 我只是花了几个小时试图摆脱“调用的目标抛出了异常”。当试图首先查看代码上下文的模型时,将弹出。所有的引用和连接字符串似乎都是正确的。

    结果发现在app.config文件中我有:
    [EntityFramework codeconfigurationType=“mysql.data.entity.mysqlefconfiguration,MySql.Data.Entity.EF6”)

    我添加了试图调试其他东西,但没有删除。当替换为没有参数的常规[entityFramework]时,它可以工作!

    我希望它可以帮助别人从失去几个小时!

  13. 视图实体数据模型不适用于IdentityDbContext,我收到一条关于nameOrConnectionString的消息,它不能为空。这是已知的错误吗?
    谢谢!!

    1. 哇!谢谢。移动了博客(一年多以前),一些重定向就不起作用了。谢谢你指出这一点。

  14. 嗨,朱莉,只是想警告一个破坏ef电源工具的Visual Studio插件。这是
    一个叫普罗普曼的v6。移除后一切恢复正常。(2015)只是想把这个放到这里,以防有人遇到臭名昭著的“异常被调用的目标抛出”安装此工具时出现问题。

  15. 朱莉,谢谢你的指点!它正好指出了问题所在——CodeFirst + PowerTools +解析连接字符串(VS2015)

    内部类myContext:dbContext
    {
    //迁移和ef powertools都没问题…
    public MyContext(): base("name=MyConnStringName")

    //迁移没问题,但是EF PowerTools抛出“对象引用未设置为对象实例”在对话框中…非常混乱:s
    public myContext():基(configurationManager.connectionStrings[“configust”].connectionString)

答复戴夫取消回复

您的电子邮件地址将不会被公布。必填字段已标记*

此网站使用Akismet来减少垃圾邮件。了解如何处理评论数据.