3

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

到目前为止,我在部署数据库之前运行 aspnet_regsql,以便数据库项目将网站特定的表合并到数据库中。我一直在寻找一种将 aspnet_ 表包含在数据库项目中的方法,但无法弄清楚如何做到这一点。

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

4

1 回答 1

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
于 2011-02-24T22:47:42.630 回答