Visual Studio数据库项目和aspnet_regsql.exe

问题描述:

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

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

有没有人试过这个?有没有很好的理由不这样做?

是的,我已经做到了。在研究它时,我看到了一些他们不推荐它的地方,其中一个是Pro ASP.Net 4.0。我想这意味着脚本的实现可能会因为一个框架版本而不同。这可能是很好的建议......也可能是过分热心的。

我比较了结构和数据,当我完成使用RedGate比较时,我找不到任何不同的结果...所以我认为它工作正常... YMMV。

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

您还需要从新项目的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