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

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

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

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

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

形象

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

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

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

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

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

蛇行MLB0B6D0B

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

设计问题!=建模问题

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

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

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

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

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

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

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

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

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

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

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

我成功的典型设置

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

形象

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

斯奈特MLB07A092

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

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

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

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

我发现此StackOverflow线程关于此错误消息以及来自的响应布莱斯·兰布森问题出在提出Visual Studio扩展的EF团队。我刚添加了两个扩展名来检查我的代码和注释。其中一个是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的Pluralsight课程中学习了这个工具-在企业应用中使用EF。伟大的东西!

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

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

  5. 我在使用ef powertools beta4的vs2013中遇到了这个问题。我试过禁用扩展,但nohing能让这个问题消失吗?

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

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

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

  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)
    实体框架电动工具测试版4yabo官网
    微软广告公共中心服务为Visual Studio
    用于Windows 8.1的Microsoft广告SDK
    Windows Phone 8.1 XAML的微软广告SDK
    Microsoft ASP.NET和Web工具
    Microsoft Visual Studio ASP.Net MVC 5 Scaffolding
    用于Visual Studio 2013的Nuget包管理器
    视觉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

    酒吧-实体
    Bar.Model – references Bar,实体框架yabo官网
    –barcontext:数据库上下文

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

答复yabo官网取消答复

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

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