查看模型的实体框架电动工具提示(这是我所依赖的功能!)yabo官网

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

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

公共CustomerServiceContext: DbContext {公共数据库集
         
          客户{得到;集合;}}
         

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

图像

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

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

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

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

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

SNAGHTMLb0b6d0b

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

设计师问题!=建模问题

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

然而,这篇博客文章的重点是我在使用该工具执行任务时遇到的问题。

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

即使设计者不打算触摸数据库来生成视图,它仍然需要访问连接字符串。

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

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

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

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

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

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

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

我成功的典型模式

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

图像

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

SNAGHTMLb07a092

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

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

在选定的文件中找不到派生自DbContext的可构造类型。

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

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

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

关于“查看模型的实体框架电动工具提示(这是我所依赖的功能!)yabo官网

  1. 好吧,在选定的文件中找不到从DbContext派生的可构造类型。我不明白。我试图映射的上下文来自我的BaseContext,而基本上下文来自Dbcontext。

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

  3. 我在使EF Power Tools Beta 3的视图实体数据模型(只读)特性与VS2010一起工作时遇到了麻烦。我解决了“在选择的文件中找不到从dbcontext派生的可构造类型”的问题。禁用所有其他VS扩展的错误。然后我开始收到错误,比如“找不到‘entityFramework’元素的模式信息”。当您首先从数据库执行逆向工程代码时,EF PT beta3会将EntityFramework.dll版本6.0.0安装到您的空项目中。当您稍后尝试查看DBContext的实体数据模型(只读)时,只读EDMX文件是使用EDMX version 3的模式构建的,该模式兼容VS2012,但不兼容VS2010。在我的项目中,我使用NuGet将实体框架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电动工具,同样的错误。

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

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

  6. 嗨,托尼,

    我也有同样的问题。你能修好这个吗?
    我正在运行带有update 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的微软广告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

    酒吧——实体
    条形图模型-参考条形图,实体框架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的消息,它不能为空。这是已知的bug吗?
    谢谢! !

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