我遇到了许多人已经面临的问题,区别在于: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支持这么差。
答案 0 :(得分:1)
现在这是一个经过验证的问题:http://entityframework.codeplex.com/workitem/898
我想知道这些人是如何测试他们的库的:他们曾经尝试过使用带有SQL CE数据库的EF5 Code First吗?
无论如何,希望它能在EF6中解决。
答案 1 :(得分:0)
假设您要从SQL Server Compact文件创建edmx,可以使用我的SQL Server Compact Toolbox扩展来从任何3.5或4.0文件创建edmx。
答案 2 :(得分:0)
这仍然存在于现有的基于文件的数据库中。这将在Sql Server Compact和LocalDb中发生。它与服务器实例下的数据库名称有关。如果您尝试直接从"反向工程师代码优先连接到原始.mdf / .sdf"在通过代码连接到同一个数据库之前的连接对话框,数据库引擎将数据库加载到服务器实例中,其名称等于数据库的完整路径,因为没有地方可以命名数据库(初始目录)并且必须命名数据库,以便将其加载到SQL Server实例。然后,当EF反向工程师代码首先尝试创建上下文时,它会阻塞DBName中存在的反斜杠(可能是冒号)。 {注意:如果在已经针对数据库连接字符串发出一些代码后连接,则服务器实例会使用您提供的初始目录(可能没有特殊字符)加载数据库文件,一切正常。
快速简便的解决方案是:
1)关闭Visual Studio以终止与DB的连接。
2)启动SQL Server Management Studio并连接到"(localDB)\ v11.0" {注意这是针对localDB实例的,我不知道紧凑的数据库实例是什么。
3)右键单击数据库名称并选择重命名,将数据库重命名为所需的初始目录名称,而不是完整的文件名路径名称。
也许EF逆向工程师代码优先工具应该评估DBName并且只使用超过最后一个斜杠的所有内容减去DBContext的文件扩展名?特别是因为大多数连接字符串将初始目录定义为与文件名相同的名称。
希望这有助于某人。