Visual Studio 2010 - 如何解决错误"EF Power Tools: modelEntityContainerName contains characters that are no



我面临着许多人已经面临的问题,不同之处在于:SDF文件名或路径都不包含无效字符。我甚至尝试过使用Northwind.sdf文件,Ikeep也遇到了同样的问题。

完整路径示例:D:\Svilupo\dotnet\EnergiaClima\EnergiaClimaWindows\App_Data\Northwind.sdf

错误消息:

System.ArgumentException: The modelEntityContainerName parameter 'D:SviluppodotnetEnergiaClimaEnergiaClimaWindowsApp_DataNorthwindsdfContext' 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数据库(如果可能的话,不是创建3.5数据库和编辑XML文件)中获取实体模型的最佳(更简单)方法是什么?

我不明白为什么SQLCE4.0支持这么差。

现在这是一个经过验证的问题:http://entityframework.codeplex.com/workitem/898

我想知道这些人是如何测试他们的库的:他们有没有尝试过在SQL CE数据库中使用EF5 Code First?

无论如何,希望它能在EF6中得到解决。

假设您想从SQL Server Compact文件创建edmx,您可以使用我的SQL Server Compact Toolbox扩展从任何3.5或4.0文件创建edmax。

这仍然发生在现有的基于文件的数据库上。这将在Sql Server Compact和LocalDb中都发生。它与服务器实例下的数据库名称有关。如果在通过代码连接到同一数据库之前,尝试直接从"反向工程代码优先"连接对话框连接到原始.mdf/.sdf,数据库引擎将数据库加载到服务器实例中,其名称等于数据库的完整路径,因为没有地方命名数据库(初始目录),并且必须命名数据库才能将其加载到sql server实例。然后,当EF Reverse Engineer Code First尝试创建上下文时,它会阻塞DBName中存在的反斜杠(可能还有冒号)。{注意:如果您在针对数据库连接字符串发出一些代码后进行连接,则服务器实例会加载带有您提供的初始目录(可能没有特殊字符)的数据库文件,并且一切正常。}

快速简单的解决方案是:

1) 关闭Visual Studio以终止与数据库的连接。

2) 启动SQL Server Management Studio并连接到"(localDB)\v11.0"{注意,这是针对localDB实例的,我不知道compact DB实例是什么。

3) 右键单击数据库名称,然后选择rename将数据库重命名为所需的初始目录名,而不是完整的文件名路径名。

也许EF反向工程代码优先工具应该评估DBName,并且只使用DBContext的最后一个斜杠减去文件扩展名之后的所有内容?特别是因为大多数连接字符串将初始目录定义为与文件名相同的名称。

希望这能帮助到别人。

最新更新