Visual Studio数据库项目和aspnet_regsql.exe

时间:2011-01-21 17:32:18

标签: visual-studio-2010 asp.net-membership database-project

我正在使用visual studio数据库项目对网站的数据库进行更改控制。我想使用aspnet_regsql工具创建的成员资格/角色模型来管理对网站的访问。

到目前为止,我在部署数据库之前运行aspnet_regsql,以便数据库项目将特定于网站的表合并到数据库中。我一直在研究在数据库项目中包含aspnet_表的方法,但无法弄清楚如何执行此操作。

有没有人试过这个?是不是有充分的理由不这样做?

1 个答案:

答案 0 :(得分:2)

是的,我做到了这一点。在研究它时,我已经看到了许多他们不推荐它的地方,Pro ASP.Net 4.0。我认为,这意味着脚本的实现可能因框架版本的不同而异。这可能是一个很好的建议......或者它可能过于热心。

当我使用RedGate Compare时,我比较了结构和数据,我找不到与结果有什么不同......所以我认为它工作正常...... YMMV。

我做的是我创建了一个新数据库并在其上运行了aspnet_regsql。然后我在VS2010中创建了一个新的数据库项目并导入了该数据库。然后,我将所有文件复制到我的新项目Schema Objects目录中,并将它们放到我现有的数据库项目Schema Objects目录中。我打开了我的旧项目,从项目菜单中显示了所有文件,然后在我的项目中包含了所有新文件。

您还需要从新项目的Database.sqlpermissions文件中复制所有数据库权限。

最后,您需要将其添加到部署后脚本中。

-- Add 6 rows to [dbo].[aspnet_SchemaVersions]
IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_SchemaVersions] WHERE [Feature] = (N'common') AND [CompatibleSchemaVersion] = N'1')
  BEGIN
    INSERT INTO [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'common', N'1', 1)
  END

IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_SchemaVersions] WHERE [Feature] = (N'health monitoring') AND [CompatibleSchemaVersion] = N'1')
  BEGIN  
    INSERT INTO [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'health monitoring', N'1', 1)
  END

IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_SchemaVersions] WHERE [Feature] = (N'membership') AND [CompatibleSchemaVersion] = N'1')
  BEGIN   
    INSERT INTO [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'membership', N'1', 1)
  END

IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_SchemaVersions] WHERE [Feature] = (N'personalization') AND [CompatibleSchemaVersion] = N'1')
  BEGIN 
    INSERT INTO [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'personalization', N'1', 1)
  END

IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_SchemaVersions] WHERE [Feature] = (N'profile') AND [CompatibleSchemaVersion] = N'1')
  BEGIN 
    INSERT INTO [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'profile', N'1', 1)
  END

IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_SchemaVersions] WHERE [Feature] = (N'role manager') AND [CompatibleSchemaVersion] = N'1')
  BEGIN 
   INSERT INTO [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'role manager', N'1', 1)
  END