在 ASP.NET 中使用 .MDF SQL Server 数据库与使用 SQL Server

Posted

技术标签:

【中文标题】在 ASP.NET 中使用 .MDF SQL Server 数据库与使用 SQL Server【英文标题】:Using a .MDF SQL Server Database with ASP.NET Versus Using SQL Server 【发布时间】:2011-02-07 13:40:12 【问题描述】:

我目前正在用 ASP.NET MVC 编写一个网站,我的数据库(其中还没有任何数据,它只有正确的表)使用我在开发中安装的 SQL Server 2008机器。我使用服务器资源管理器连接到应用程序外的数据库,然后使用 LINQ 到 SQL 映射。

网站开发完成后,我会将其移至我的托管服务,这是一个虚拟托管计划。我担心使用当前在我的开发机器上运行的 SQL Server 设置是否难以在生产服务器上执行,因为我必须通过主机控制面板导入所有数据库表。

我注意到可以从 Visual Studio 中创建 SQL Server 数据库。然后将其存储在 App_Data 目录中。

我的问题如下:

将我的 SQL Server DB 移出 SQL Server 并作为 .mdf 文件移入 App_Data 目录是否有意义? 如果是这样,如何我可以移动它?我相信这叫做Detach 命令,不是吗? .mdf 这样的文件是否会出现任何性能/安全问题? 我的预期设置是否适用于典型的虚拟主机计划?我希望.mdf 数据库不会计入我的计划可以创建的有限数量的 SQL Server 数据库中。

我希望这个问题不会太宽泛。提前致谢!

注意:我刚刚开始使用 ASP.NET MVC 和所有这些,所以我可能完全误解了它应该如何工作。

【问题讨论】:

【参考方案1】:

App_Data MDF 是一个 SQL Server 数据库,它将实时附加到 SQL Server 实例。访问 MDF 的唯一方法是连接到 SQL Server。 Visual Studio 隐藏了幕后发生的事情,但您仍在使用 SQL Server 实例。 MDF 的这种即时附件仅适用于 SQL Express 版本。在 SQL Express 2005 中,您最终会得到一个用户实例,请参阅Connecting to SQL Server Express User Instances (ADO.NET)。使用 SQL Express 2008,您可以控制是否需要用户实例或附加到服务实例。

您必须与您的托管服务提供商核实,以确认他们是否将此数据库视为计划中的一个数据库。您必须记住,从资源使用的角度来看,通过连接字符串附加数据库(当您使用 App_Data MDF 部署选项时会发生这种情况)与打开和运行数据库的任何其他方式一样昂贵,所以听到他们允许这样做并且不计入计划中允许的数据库数量,我会感到非常惊讶。

【讨论】:

【参考方案2】:

所有 SQL Server 数据库都是 .mdf 文件。 .mdf 文件存储在此处:*C:\Program Files\Microsoft SQL Server\MSSQL\Data*(默认位置)。

您必须将 SQL 数据库与服务器分离才能将数据库移动到您的 App_Data 文件夹,这是正确的。您可以通过右键单击 SSMS 中的数据库来执行此操作。

将数据库移动到 App_Data 文件夹的好处是:

    在生产中使用时,数据库将保留在那里,并且当您连接到 SQL Server 时,您将动态地将数据库附加到它。 您希望将网站与 App_Data 文件夹中的 mdf 一起发布到您的服务器(与第一个原因一起使用)。 将所有项目文件保存在一个位置。易于移动。易于备份。

在您将通过自定义控制面板上传数据库的场景中,我认为将数据库移动到 App_Data 文件夹没有任何优势。当您发布站点时,您可以简单地分离数据库,获取 mdf 文件并上传(您的控制面板可能有其他方式来导入数据库,例如 SQL 脚本...)。

直接回答你的问题...

移动我的 SQL 有意义吗 服务器数据库从 SQL Server 出来并进入 App_Data 目录为 .mdf 文件?

我不这么认为。

如果是这样,我该如何移动它?

分离。您可以通过右键单击 SSMS 中的数据库来执行此操作。

是否有任何性能/安全性 .mdf 文件可能出现的问题 像这样?

我不确定安全差异,但如前所述,当数据库连接到 SQL Server 时,性能可能会更好。

我的预期设置是否可以正常工作 典型的虚拟主机方案?

您必须检查它们是否计数/允许动态附加 sql 数据库。

我希望这会有所帮助。我不是专家。

【讨论】:

【参考方案3】:

不要将 App_Data 用于您的数据库。这对一些快速的“操作方法”或原型很有用,但对生产服务器不利。在维护过程中会给您带来很多麻烦。我用过一次,以后再也没有...

是的,性能。因为它总是必须附加数据库。当您的网站很小,每天有几个访问者时,这不是什么大问题。

最好问问你的托管服务他们算不算。

【讨论】:

【参考方案4】:

老实说,这可能无法直接回答您的问题,但我发现您在托管(不是本地)上设置它的方式是将您的数据库移动/导入到您的托管公司,然后他们会给您一个连接字符串到您的主机/数据库。一旦您“上线”(或通过将您的网站上传到主机进行测试) - 将连接字符串更改为您的主机提供的连接字符串,在您的 web.config 中。这可能过于简单,但一直对我有用。

【讨论】:

以上是关于在 ASP.NET 中使用 .MDF SQL Server 数据库与使用 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Visual Studio 使用我的数据库,而不是 ASP.NET MVC 项目中 App_Data 文件夹中的 .mdf 文件?

asp.net连接sql数据库的连接字符串怎么写啊?

Asp.net 访问数据库的几种方式

ASP.NET EF - DbContext 的 DbSet 未更新

如何查看 mdf 文件中的数据

如何在 ASP.NET MVC 应用程序中管理和部署架构(使用 NHibernate)