我有一个包含两个项目的Visual Studio解决方案:MyApp.MvcUI
和MyApp.Domain
(类库)。
MyApp.MvcUI
包含我的SQL Server CE 4数据库。
MyApp.Domain
应该包含Entity Framework EDMX文件,但如果我在那里添加它,我就没有选择使用SQL Server CE 4,只有3.5。
http://www.codetunnel.com/content/images/sqlce35only.jpg
如果我在MvcUI
项目中添加EDMX,那么我可以选择SQL Server CE 4.
问题
如何将我的Entity Framework内容放入MyApp.Domain
项目并使用位于MyApp.MvcUI
项目中的SQL Server CE 4数据库?
一旦我解决了这个问题,App.Config
中我的连接字符串的数据源部分会是什么样子?我知道web项目的连接字符串将如下所示:
Data Source=|DataDirectory|\CE4DB.sdf
但是App.Config
项目中的MyApp.Domain
会是什么样子?它会像
C:\Code\MyProject\MyApp.MvcUI\App_Data\CE4DB.sdf
如果是这样,有没有办法让它成为一个相对路径,所以当人们从源代码控制中拉下项目时,它仍然可以在没有路径修正的情况下工作?
答案 0 :(得分:3)
我相信你必须做以下事情(我为我做了什么)
答案 1 :(得分:3)
4.0 EDMX向导仅适用于Web项目,正如您所注意到的那样。您可以使用我的SQL Server Compact Toolbox加载项在任何项目类型中创建和4.0 EDMX。
答案 2 :(得分:1)
我在这里尝试了这些建议。我的EF已经是最新版本(截至本文的4.3),但我确实通过nuget和EntityFramework.SqlServerCompact安装了SQL Server CE,其中说“允许SQL Server Compact 4.0与实体框架一起使用”。尝试从数据库更新EDMX模型时,仍然没有在向导中使用CE 4的选项。如果这一切都在MVC项目中完成,那么我可以选择在我的问题中所示的对话框中使用CE 4.
我确实让它工作了。我只是使用了一个连接字符串,就像我将EDMX放入MVC项目时生成的连接字符串一样。
<add name="EntityContainer"
connectionString="metadata=res://*/Model1.csdl|
res://*/Model1.ssdl|
res://*/Model1.msl;
provider=System.Data.SqlServerCe.4.0;
provider connection string="
Data Source=..\MyApp.MvcUI\App_Data\CE4DB.sdf""
providerName="System.Data.EntityClient" />
然后我能够让EF设计师从数据库中读取。作为奖励,数据源路径是相对的:D所以其他开发人员从源代码控制中删除项目的新副本也将能够立即使用EF设计器而无需调整它。我打算很快转换到代码优先的EF,但我想首先使用EDMX,因为这是我目前所知道的。
显然,在运行时,MyApp.Domain中的连接字符串无关紧要,因为它从活动项目的配置文件中读取。在这种情况下,MvcUI项目的Web.Config。由于简化了路径,因此连接字符串更容易。
<add name="EntityContainer"
connectionString="metadata=res://*/Model1.csdl|
res://*/Model1.ssdl|
res://*/Model1.msl;
provider=System.Data.SqlServerCe.4.0;
provider connection string="
Data Source=|DataDirectory|\CE4DB.sdf""
providerName="System.Data.EntityClient" />
答案 3 :(得分:0)
我建议使用NuGet下载EF,SQL Server CE 4.0以及所有必需的依赖项,并自动将它们添加到您的项目中。
这也将在您的应用配置中设置所需的提供商,以防缺少。
如果您不熟悉NuGet,可以先在解决方案资源管理器窗口中右键单击项目,然后选择“添加库参考”。 (也许这不是准确的名字,但很容易找到)。