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

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

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

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

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

图像

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

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

所以我真的不能没有这个工具,我把它展示给每一个我可以的人。

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

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

SnAGHTMLB066D0B

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

设计师问题!=建模问题

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

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

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

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

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

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

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

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

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

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

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

我成功的典型模式

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

图像

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

SNAGHTMLb07a092

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

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

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

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

我发现这个StackOverflow线程关于此错误消息,包含来自的响应布赖斯Lambson英孚团队提出了一个Visual Studio扩展的问题。我刚刚添加了两个扩展来检查代码和注释的拼写。一个是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的一门伟大的多元化课程中学习了这个工具–在企业应用程序中使用EF。很棒的东西!

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

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

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

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

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

  6. 嗨,托尼,

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

  7. 不,我还没试过EF6.1设计师。通过根据SO helper函数注释onmodelcreate()函数中的代码,我确实成功地让搭建工作了起来。

    谢谢你的帮助。

  8. 好听的,托尼。尽管我不需要那个黑客。似乎脚手架就是不理解连贯的配置。我的猜测是(现在没有时间做实验)这并不是由power工具创建的上下文,但是,连贯配置代码的存在造成了冲突。是否必须对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广告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
    EF6.1.1
    EF电动工具测试版4

    有什么建议吗?

  11. 朱莉,

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

    我的解决方案,我有:

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

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

    启动
    - App.CONFIG

    当我第一次开始Visual Studio的时候(2012/2013),我选择从code-first中查看实体数据模型(只读)的第一个DB上下文成功地做到了这一点。之后,任何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的消息,它不能为空。这是已知的错误吗?
    谢谢! !

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

  14. 嗨,朱莉,只是想警告一个Visual Studio插件破坏了EF Power Tools。这是
    一个叫普罗普曼的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来减少垃圾邮件。了解如何处理评论数据.