2011-01-21 163 views
3

我正在使用Visual Studio數據庫項目對網站的數據庫執行更改控制。我想使用由aspnet_regsql工具創建的成員/角色模型來管理對網站的訪問。Visual Studio數據庫項目和aspnet_regsql.exe

到目前爲止,我在部署數據庫之前運行了aspnet_regsql,以便數據庫項目將網站特定的表合併到數據庫中。我一直在尋找一種方法將aspnet_表包含在數據庫項目中,但無法弄清楚如何執行此操作。

有沒有人試過這個?有沒有很好的理由不這樣做?

回答

2

是的,我已經做到了。在研究它時,我看到了一些他們不推薦它的地方,其中一個是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 
相關問題