我的解决方案中有两个项目:
MyProject.UI (ASP.NET MVC 3)
MyProject.Domain(类库)
我在我的类库项目中添加了一个 sql server express 数据库以及一个 Entity Framework edmx 文件。 Entity Framework 中的模型设计者可以毫无问题地找到并连接到该项目中的数据库。当我这样做时,它会生成一个带有以下连接字符串的 app.config 文件:
<add name="TestDBstuffEntities" connectionString="metadata=res://*/Test.csdl|res://*/Test.ssdl|res://*/Test.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestDBstuff.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
您会注意到连接字符串包含 AttachDbFilename=|DataDirectory|\TestDBstuff.mdf;
。当我将此连接字符串复制到 UI web.config 以便它可以在运行时使用时,出现错误。我假设这是因为它现在指的是 UI 项目的数据目录 (App_Data)。如果我将 AttachDbFilename=|DataDirectory|\TestDBstuff.mdf;
更改为存储 .mdf 文件的完全限定路径,它将起作用。
我的问题是,在 UI 项目之外的另一个项目中存储 sql server express 文件的最佳做法是什么?
最佳答案
我知道解决方案应该是什么,因为我在第一次创建 MVC 解决方案时不得不查找它并且遇到了同样的问题。我从来没有时间让它完全工作,所以这里可能有问题。
基本上,您应该设置DataDirectory
的值。在Global.asax.cs
文件的Application_Start
方法中,添加
AppDomain.CurrentDomain.SetData("DataDirectory", "c:\Path\To\Your\Database\Directory");
进行明显的替换。
现在,还有其他潜在的问题 -- .mdf
需要部署在某个地方,并且 SQL Server Express 需要具有在其部署位置读取和写入文件的权限。我不记得 SQL Server Express 的用户名,但我确实记得它很长;仔细检查您知道 SQL Server Express 可以访问的目录的权限以查找用户名。此外,您可能不希望每次构建解决方案时都覆盖数据库文件。 This MSDN blog post 是为 Visual Studio 2005 编写的,但我认为即使在 2010 年它仍然适用。
如果我遗漏了什么,我很抱歉。正如我所说,我还没有时间让我自己的解决方案完全发挥作用,但我认为这就是我的想法。
关于c# - 如何将 sql server express 存储在与 UI 不同的项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529786/