在使用实体框架的代码和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官网我的重点是第一个“视图实体数据模型(只读)”。
但有一半的时间,它不起作用,我总是做错事,忘记了。
设计师问题!=建模问题
如果你的模型有问题,您将在输出窗口中收到一条有用的错误消息。这是关于映射的问题。一个常见的问题是,您试图创建一个一对一的映射,但没有首先给出足够的代码细节(例如。它需要知道哪一个是主体,哪一个是从属)。
然而,这篇博文的重点是我在获取执行它的任务的工具时遇到的问题。
设计器失败的最常见原因:找不到连接字符串
即使设计人员不会通过触摸数据库来生成视图,它仍然需要访问连接字符串。
但当它找不到的时候,它并不总是告诉您它找不到连接字符串。
通常我会收到一条错误信息,上面写着:“序列不包含匹配元素”。
另一个是“异常已被调用的目标抛出”。
设计器在解决方案的启动项目中查找连接字符串
这是设计师不能工作的首要原因。这有点痛苦,因为你并不想为设计师设计东西,但对于调试模式。启动项目是否可执行并不重要。它必须是一些带有配置文件的项目在配置文件中,EF将查找的有效连接信息(实体框架部分中的连接字符串或连接信息)。yabo官网
设计器将不在解决方案或项目文件夹中查找
这就是设计师不工作的原因。我喜欢组织我的解决方案。我将项目组织到解决方案文件夹中,并将代码组织到项目文件夹中。如果配置文件在文件夹中,设计师不会找到它的。
我成功的典型模式
所以我的解决方案中有一个单独的项目,它不在文件夹中,只是为了帮助我使用这个关键的设计器工具。感谢Vaughn Vernon帮助我为这个项目找到了一个比我之前使用的更好的名字,这让我很清楚地认识到这与我的应用程序完全无关。
当我需要查看模型时,只要我记得在我的解决方案中将这个项目设置为启动项目,设计师能胜任这项工作。下面是一个将其用于甚至不直接继承DbContext的上下文的例子。它继承自我自己的类"BaseContext"从dbContext继承。即使有了这个额外的抽象,设计师也能向我展示视觉模型。
另一个与连接字符串无关的奇怪错误:“一个可构造类型……”
感谢伊桑在评论中指出了这一点。事实上,我在写这篇文章的前一天就已经忘记了(短期记忆问题…年老…借口)。
“在所选文件中找不到从dbContext派生的可构造类型。”
这是误导,因为像伊桑一样,我从baseContext派生的事实使我相信,*this*是无法找到dbContext类型的原因。但是将CustomerServiceContext更改为直接继承DbContext并没有解决我的问题。
我找到了这个StackOverflow线程关于此错误消息,包含来自的响应布赖斯Lambson英孚团队提出了一个Visual Studio扩展的问题。我刚刚添加了两个扩展来检查代码和注释的拼写。其中一个是HTML拼写检查器(来自Microsoft)另一个是多语言拼写检查程序(也来自微软的某个人)。所以我想我应该一次禁用一个,看看是不是罪魁祸首。我碰巧选择了HTML拼写检查器先禁用,瞧,视图实体数据模型工具再次工作(在vs重新启动之后)。幸运的是,第二个扩展是我真正想要的。我相信这个问题将在我们在EF6中集成工具时得到解决。
报名参加我的通讯所以你不要错过我的会议和多元化课程公告!
好啊,在选定的文件中找不到从DbContext派生的可构造类型。我不明白。我试图映射的上下文派生自我的baseContext,而基上下文派生自dbContext。
哦,天哪,就在昨天。真不敢相信我没有把它加进去。你能相信它来自我添加的Visual Studio扩展吗?当我禁用扩展时,问题消失了。扩展名是HTML拼写检查器。在阅读了布莱斯(他在英孚团队)的回复后,我才意识到这一点:stackoverflow.com/.../a-constructible
那么,在发现问题之前,您是否逐个禁用了扩展?
哈哈。不,我只安装了两个,所以我禁用的第一个就成功了。不过我还是很怀疑。我不喜欢这样的巧合。是那个特定的扩展还是关于安装扩展?
它的一般扩展。我无法启用任何扩展并让它工作。
好的。现在我开始工作了,完全不可或缺。
@伊桑:太棒了,还有……对吗?我不能没有这个工具!
我在让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。棒极了!
首先,朱莉,非常棒的信息。自从我发现你的英孚课程时就一直跟着你。第二…如果我告诉你关闭vs和删除.suo文件有助于我“调用的目标抛出了异常”。我实现了对dbContexts的所有建议,每当我更改模型并尝试查看edmx时,就会显示此消息。
尚未测试,但可能不需要删除suo文件。只是想让你们知道。
我在VS2013的EF Powertools beta4中遇到了这个问题。我试过禁用扩展,但nohing能让这个问题消失吗?
戴夫,你有什么问题?我成功地使用了beta4工具。
我创建了一个MVC 5应用程序,然后首先使用EF 6.1代码和SQL Server Express上现有的DB。当我尝试创建视图时,我使用的是“New scaffold item…”然后选择“带视图的MVC 5控制器,使用实体框架。”yabo官网我选择模型和上下文类,然后单击OK。然后出现以下错误消息,并且没有创建任何代码。我卸载了EF Power Tools,但出现了相同的错误。
错误
运行所选代码生成器时出错:
异常已被调用的目标抛出。
还有其他可能导致这个错误的想法吗?
嗨,托尼,
我也有同样的问题。你能修好这个吗?
我正在运行带有更新2的Visual Studio 2013。
@Koen & Tony: FWIW,我看到了关于stackoverflow上的搭建问题的类似报告(例如,http://stackoverflow.com/questions/23576294/application-cant-scaffold-items)。不确定这是EF问题还是脚手架模板的问题。我在推特上问过是否有人熟悉,并将在这里报道。
@Koen,我还是有这个问题。我很失望,因为我喜欢它的功能。
我不能重复这个问题。只是出于好奇,您是否尝试过使用新的EF6.1设计器,现在让我们先对现有数据库进行反向工程以进行编码?(http://thedatafarm.wpengine.com/data-access/first-look-at-beta-of-ef-6-1-designer/)而不是用电动工具?(然后看看脚手架会发生什么?)
我刚刚试用了EF 6.1,效果也不错。
谢谢您。
不,我还没试过EF6.1设计师。通过根据SO helper函数注释onmodelcreate()函数中的代码,我确实成功地让搭建工作了起来。
谢谢你的帮助。
很高兴听到,托尼。尽管在我看来,黑客攻击是没有必要的。似乎脚手架就是不理解连贯的配置。我的猜测是(现在没有时间做实验)这并不是由power工具创建的上下文,但是,连贯配置代码的存在造成了冲突。是否必须对EF6.1设计器创建的上下文使用相同的解决方案?
我现在正在使用VS2013,无法找到EF电动工具安装了。我过去一直用它。现在制作实体数据模型图的最佳方法是什么?
你好托马斯,
仍然存在:http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d.
我有时很难从VS扩展管理器中找到它,我自己。您必须在所有适当的空间中键入实体框架电动工具。yabo官网
祝福你!我在看包裹,*不*扩展/更新。谢谢您,谢谢您!
-仍然爱你的书!
我无法用电动工具解决这个错误,我真的希望能够查看我的数据模型。
错误消息:在选定的文件中找不到从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
有什么建议吗?
嘿,jolco,我真的不知道。我敢打赌,如果你在这个旧工作项目中对你的问题发表评论,然后,布莱斯或者其他的英孚团队开发人员,他们可能会给你一个线索。对不起,我不能再帮你了。
http://entityframework.codeplex.com/workitem/810
朱莉
会做的事情。谢谢你的链接朱莉。
朱莉,
我创建了一个示例解决方案来缩小范围……
我正在研究一个有几个边界上下文的解,正如你所描述的。
我的实体与它们的模型在不同的项目中。
我的解决方案,我有:
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。
你有过这样的经历吗?有没有一种解决方案不会影响我的解决方案设计?我给自己挖了一个不必要的洞吗?
我在网上搜索了一个有效的解决方案。
嗨,马特,
啊,这个问题我一时想不起来。我从来没有因为使用这个工具而被迫将我的域类移动到与我的上下文相同的项目中。我经常遇到这种情况。我想你需要有人和你一起看。也,非常抱歉错过了你的评论。我知道已经3周了,所以希望你已经解决了,我有兴趣知道问题和解决方案是什么。
我只是花了几个小时试图摆脱“调用的目标抛出了异常”。当试图首先查看代码上下文的模型时,将弹出。所有的引用和连接字符串似乎都是正确的。
结果发现在app.config文件中我有:
[entityFramework codeConfigurationType = " MySql.Data.Entity.MySqlEFConfiguration,mysql.data.entity.ef6“]
我添加了试图调试其他东西,但没有删除。当替换为没有参数的常规[entityFramework]时,它可以工作!
我希望它能帮助别人避免损失几个小时!
视图实体数据模型不使用IdentityDBContext,我收到一条关于nameOrConnectionString的消息,它不能为空。这是已知的错误吗?
谢谢! !
嗨,朱莉,
屏幕似乎下降了-你能更新吗?事先谢谢。
问候,
/ P
哇!谢谢。移动博客(一年多前)和一些重定向只是不起作用。谢谢你指出这一点。
嗨,朱莉,只是想警告一个Visual Studio插件破坏了EF Power Tools。这是
一个叫普罗普曼的v6。移除后一切恢复正常。(2015)只是想把这个放在这里,以防有人遇到臭名昭著的“调用的目标抛出了异常”。安装此工具时出现问题。
朱莉,谢谢你的指点!它正好指出了问题所在——CodeFirst + PowerTools +解析连接字符串(VS2015)
内部类myContext:dbContext
{
//迁移和ef powertools都没问题…
public MyContext(): base("name=MyConnStringName")
//迁移没问题,但是EF PowerTools抛出“对象引用未设置为对象实例”在一个对话框中
public MyContext(): base(configurationmanager .ConnectionString ["ConfigMgr"].ConnectionString)
你好,是否有适用于EF Core的版本?我得到一个错误与EF核心。
哦,是的是的!EF核心动力工具如下:https://github.com/erikej/sqlcetoolbox/wiki/ef-core-power-tools
您也可以通过VS2017扩展找到它们。Erik已经接管了EF6电动工具的管理工作:https://github.com/ErikEJ/EntityFramework6PowerTools
嘿,
这仍然发生在2019年。
在遵循朱莉的路线。
谢谢你的修复!!