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

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

例如,我可以有一组类,但dbContext只指定一个dbset:

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

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

图像

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

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

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

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

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

蛇行MLB0B6D0B

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

设计师问题!=建模问题

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

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

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

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

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

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

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

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

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

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

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

我成功的典型模式

所以我的解决方案中有一个单独的项目,它不在文件夹中,只是为了帮助我使用这个关键的设计器工具。感谢沃恩·弗农帮助我为这个项目找到了一个比我一直使用的更好的名字,这很明显这与我的应用程序一点关系都没有。

图像

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

斯奈特MLB07A092

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

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

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

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

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

注册我的通讯所以你不要错过我的会议和多元化课程公告!

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

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

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

  3. 我在让EFPowertoolsBeta3的视图实体数据模型(只读)功能与VS2010一起工作时遇到了问题。我解决了“在所选文件中找不到从dbContext派生的可构造类型”禁用所有其他VS扩展的错误。然后我开始得到类似“找不到元素“entityframework”的架构信息”的错误。当您首先从数据库执行逆向工程代码时,EF PT beta3会将EntityFramework.dll版本6.0.0安装到您的空项目中。当您稍后尝试查看DBContext的实体数据模型(只读)时,只读EDMX文件是使用与VS2012兼容但与VS2010不兼容的EDMX版本3的架构构建的。在我的项目中,我使用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官网我选择模型和上下文类,然后单击“确定”。然后出现以下错误消息,未创建任何代码。我卸载了EF Power Tools,但出现了相同的错误。

    误差
    运行所选代码生成器时出错:
    “调用的目标引发了异常。”

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

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

    谢谢你的帮助。

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

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

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

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

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

    当前在vs中的扩展名:
    以下是扩展和更新中列出的项目:
    行为SDK(XAML)
    实体框架电动工具测试版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脚手架
    用于Visual Studio 2013的Nuget包管理器
    视觉f# 3.1
    用于JavaScript的Windows库的Visual Studio扩展
    Windows Phone 8.1 SDK集成
    工作流管理器活动

    我使用的是vs Premium 2013
    参考6.1.1
    EF电动工具测试版4

    有什么建议吗?

  10. 朱莉,

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

    在我的解决方案中,我有:

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

    酒吧-实体
    条形图模型-参考条形图,实体框架yabo官网
    –barcontext:数据库上下文

    启动
    –app.config(应用程序配置)

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

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

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

    我禁用了所有可以禁用的扩展。我正在使用EF6.1.1和EFPowertoolsBeta4。

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

    我在网上搜索了一个有效的解决方案。

    1. 嗨,马特,
      伊克斯不确定我头上的这个。我从来没有因为使用这个工具而被迫将我的域类移动到与我的上下文相同的项目中。我经常遇到这种情况。我想你需要有人和你一起看。也,非常抱歉错过了你的评论。我知道已经3周了,所以希望你已经解决了,我有兴趣知道问题和解决方案是什么。

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

    结果发现在app.config文件中我有:
    [entityFramework codeConfigurationType = " MySql.Data.Entity.MySqlEFConfiguration,mysql.data.entity.ef6“]

    我添加了尝试调试其他内容,但没有删除。当替换为没有参数的普通[EntityFramework]时,它工作正常!

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

  12. 视图实体数据模型不使用IdentityDBContext,我收到一条关于名称或连接字符串不能为空的消息。这是已知的错误吗?
    谢谢! !

  13. 嗨,朱莉,只是想警告一个Visual Studio插件破坏了EF Power Tools。它是
    一个叫propman的小VSIX。手术后一切恢复正常。(2015)只是想把这个放在这里,以防有人遇到臭名昭著的“调用的目标抛出了异常”。安装此工具时出现问题。

  14. 谢谢你的指点,朱莉!它指出了问题所在——codefirst+powertools+解析连接字符串(vs2015)

    内部类myContext:dbContext
    {
    //迁移和ef powertools都没问题…
    public myContext():base(“name=myCanStringName”)。

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

答复大卫T取消答复

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

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