如何解决错误的“EF Power Tools:modelEntityContainerName 包含无效字符”?
Posted
技术标签:
【中文标题】如何解决错误的“EF Power Tools:modelEntityContainerName 包含无效字符”?【英文标题】:How to solve false "EF Power Tools: modelEntityContainerName contains characters that are not valid"? 【发布时间】:2013-02-20 10:33:11 【问题描述】:我面临一个许多人已经面临的问题,但有所不同:SDF 文件名或路径均不包含无效字符。 我什至尝试过使用 Northwind.sdf 文件,但 Ikeep 遇到了同样的问题。
完整路径示例:D:\Sviluppo\dotnet\EnergiaClima\EnergiaClimaWindows\App_Data\Northwind.sdf
错误信息:
System.ArgumentException: The modelEntityContainerName parameter 'D:\Sviluppo\dotnet\EnergiaClima\EnergiaClimaWindows\App_Data\NorthwindsdfContext' contains characters that are not valid.
at System.Data.Entity.Design.EntityModelSchemaGenerator..ctor(EntityContainer storeEntityContainer, String namespaceName, String modelEntityContainerName)
at Microsoft.DbContextPackage.Handlers.ReverseEngineerCodeFirstHandler.ReverseEngineerCodeFirst(Project project)
这个问题让我抓狂:EF Power Tools Beta 3 真的可以在 VS2010 中运行吗? 如果没有,从 SQLCE4.0 DB 获取实体模型的最佳(和更简单)方法是什么(如果可能,不是创建 3.5 DB 和编辑 XML 文件的方法)?
我不明白为什么对 SQLCE4.0 的支持这么差。
【问题讨论】:
【参考方案1】:现在这是一个经过验证的问题:http://entityframework.codeplex.com/workitem/898
我想知道这些人是如何测试他们的库的:他们是否曾尝试将 EF5 Code First 与 SQL CE 数据库一起使用?
无论如何,希望它会在 EF6 中得到解决。
【讨论】:
刚刚检查了 v6.0.1 没有变化。他们现在的目标是 6.1.0。【参考方案2】:假设您想从 SQL Server Compact 文件创建 edmx,您可以使用我的 SQL Server Compact Toolbox 扩展从任何 3.5 或 4.0 文件创建 edmx。
【讨论】:
你为什么假设我使用的是 VS2012?我写过“EF Power Tools Beta 3 是否真的在 VS2010 中工作”。一切都已正确安装,但我不断收到此错误消息,即使文件名不包含无效字符。 工具箱也可以使用。 VS 2010 埃里克,真的,我知道这应该可以工作,但在我的情况下却不行。正如我所写的,NorthWind.sdf 数据库也会发生这种情况。我只是在寻求帮助,找出发生这种情况的原因。 好的,让我试着理解一下:你不能用工具箱创建一个edmx?你得到什么错误? 问题出在我的问题上:当我尝试对 SQLCE4.0 数据库进行逆向工程时,我收到了上面写的错误消息。【参考方案3】:这仍然发生在现有的基于文件的数据库上。这将在 Sql Server Compact 和 LocalDb 中发生。它与服务器实例下的数据库名称有关。如果您在通过代码连接到同一个数据库之前尝试直接从“逆向工程师代码优先”连接对话框连接到原始 .mdf / .sdf,则数据库引擎会将数据库加载到名称等于db 的完整路径,因为没有地方命名数据库(初始目录)并且必须命名数据库才能将其加载到 sql server 实例。然后,当 EF Reverse Engineer Code First 尝试创建上下文时,它会阻塞 DBName 中存在的反斜杠(可能还有冒号)。 注意:如果您在针对数据库连接字符串发布了一些代码之后进行连接,则服务器实例会使用您提供的初始目录(可能没有特殊字符)加载数据库文件,并且一切正常。
快速简便的解决方案是:
1) 关闭 Visual Studio 以终止与数据库的连接。
2) 启动 SQL Server Management Studio 并连接到 "(localDB)\v11.0" 注意这是 localDB 实例,我不知道紧凑型数据库实例是什么。
3) 右键单击数据库名称并选择重命名以将数据库重命名为所需的初始目录名称,而不是完整的文件名路径名称。
也许 EF 逆向工程师 Code First 工具应该评估 DBName,并且只使用最后一个斜杠减去 DBContext 的文件扩展名之后的所有内容?特别是因为大多数连接字符串都将初始目录定义为与文件名相同的名称。
希望这对某人有所帮助。
【讨论】:
以上是关于如何解决错误的“EF Power Tools:modelEntityContainerName 包含无效字符”?的主要内容,如果未能解决你的问题,请参考以下文章