c# - 如何将 sql server express 存储在与 UI 不同的项目中?

标签 c# sql-server asp.net-mvc entity-framework sql-server-express

我的解决方案中有两个项目:

  • 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=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestDBstuff.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" 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/

相关文章:

c# - 在 C# ShockWave 组件上调用 Play() 不会启动 YouTube 视频播放?

sql - 如何使用 sql server management studio 将 blob 插入数据库

c# - 运行 SQL 命令并返回消息

javascript - 如何使用 jquery ajax 从 mvc Controller 获取 <list> 进行查看

c# - 如何在 ASP MVC 中下载 NPOI 生成的 xls 文件

c# - 将 Oculus Unity Integration 升级到 v12 后,传送无法在 Quest 上运行

c# - XNA Content 不会卸载一次性资源 (Texture2D)

SQL Server - 重写触发器以避免基于游标的方法

asp.net-mvc - ASP.NET MVC : Implement client side validation with attribute without IClientValidatable

c# - Math.Abs​​() 不会创建精确的绝对值