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

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

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

公共客户服务上下文:dbContext{公共数据库集
         
          顾客得到;集合;}}
         

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

形象

映射混淆的另一个常见点是关系。能够可视化代码如何首先解释模型,可以告诉我在哪里,例如,我试图定义一种1:1的关系,但事实上,I've defined a 1:0..1 which will really create problems down the road in my application.

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

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

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

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

蛇行MLB0B6D0B

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

设计师问题!=建模问题

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

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

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

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

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

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

另一个是“异常已被调用的目标抛出”。

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

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

设计器将不在解决方案或项目文件夹中查找

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

我成功的典型设置

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

形象

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

SNAGHTMLb07a092

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

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

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

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

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

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

关于“实体框架查看模型的强大工具提示(我依赖的功能!)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的一门伟大的多元化课程中学习了这个工具–在企业应用程序中使用EF。棒极了!

  4. 首先……好消息,朱莉。自从我发现你的英孚课程时就一直跟着你。第二…如果我告诉你关闭vs和删除.suo文件有助于我“调用的目标抛出了异常”。我实现了对dbContexts的所有建议,每当我更改模型并尝试查看edmx时,就会显示此消息。

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

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

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

    还有其他可能导致这个错误的想法吗?

  6. 嗨,托尼,

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

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

    谢谢你的帮助。

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

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

  10. 我无法用电动工具解决这个错误,我真的希望能够查看我的数据模型。

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

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

    扩展目前在VS:
    以下是扩展和更新中列出的项目:
    行为SDK(XAML)
    实体框架Power Tools Beta 4yabo官网
    用于Visual Studio的Microsoft广告发布中心服务
    用于Windows 8.1的Microsoft广告SDK
    Windows Phone 8.1 XAML的微软广告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
    参考6.1.1
    EF电动工具测试版4

    有什么建议吗?

  11. 朱莉

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

    我的解决方案,我有:

    Foo -实体
    foo.模型-参考foo,实体框架yabo官网
    - FooContext: DbContext

    酒吧——实体
    Bar.Model – references Bar,实体框架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. 嘿,马特,
      啊,这个问题我一时想不起来。我从未被强迫将我的域类移动到与我使用这个工具的上下文相同的项目中。我经常进行这种设置。我想你需要有人和你一起看。也,非常抱歉错过了你的评论。我知道已经3周了,所以希望你已经解决了,我有兴趣知道问题和解决方案是什么。

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

    结果发现在app.config文件中我有:
    [EntityFramework codeconfigurationType=“mysql.data.entity.mysqlefconfiguration,mysql.data.entity.ef6“]

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

    我希望它能帮助别人避免损失几个小时!

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

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

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

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

    //迁移没问题,但是EF PowerTools抛出“对象引用未设置为对象实例”在一个对话框中
    public MyContext(): base(configurationmanager .ConnectionString ["ConfigMgr"].ConnectionString)

答复罗德里戈取消回复

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

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