在ASP.NET MVC应用程序中管理多个客户数据库

时间:2010-04-20 22:59:24

标签: c# sql-server linq-to-sql multi-tenant

我正在构建一个需要为每个客户提供单独的SQL Server数据库的应用程序。

要实现这一点,我需要能够创建一个新的客户文件夹,将原型数据库的副本放在该文件夹中,更改数据库的名称,并将其作为新的“数据库实例”附加到SQL Server 。原型数据库包含所有必需的表,字段和索引定义,但没有数据记录。我将使用SMO来管理数据库的附加,分离和重命名。

在创建原型数据库的过程中,我尝试使用Sql Server Management Studio将数据库副本(伴随.MDF,.LDF对)附加到SQL Server,并发现SSMS期望数据库驻留在< / p>

c:\program files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabaseName.MDF

这是SQL Server的“功能”吗?有没有办法在单独的目录中管理个别数据库?或者我是否必须将所有客户数据库放在同一目录中? (我希望能有一个比这更好的控制)。

注意:我目前正在使用SQL Server Express,但仅​​用于测试目的。生产数据库将是SQL Server 2008,Enterprise版本。所以“用户实例”不是一种选择。

1 个答案:

答案 0 :(得分:0)

MDF中包含所有数据库文件的物理路径的表,因为它们位于与其分离的实例上。您可以在附加操作期间覆盖位置:

CREATE DATABASE <dbname>
 ON (name=dbfilelogicalname, filename='c:\myNewPath\dbfilename.mdf'),
 (name=dbfile2logicalname, filename='c:\myNewPath\dbfilename2.ndf'),
 (name=dbloglogicalname, filename='c:\myNewPath\dblogfilename.ldf')
 FOR ATTACH;