2010-02-15 2 views
4

Я хочу использовать приложения ASP.NET Application Services, но настройте его для использования другой схемы. Я использую инструмент aspnet_regsql.exe, как указано в this URL, который по умолчанию создает таблицы и хранимые процедуры с помощью схемы dbo.Настроить службы приложений ASP.NET для использования схемы, отличной от «dbo»

Так что я думал, что могу просто сгенерировать сценарий базы данных из существующих объектов приложения, а затем найти и заменить [dbo] с помощью [example], а затем удалить исходные объекты прикладных служб и выполнить отредактированный сценарий, чтобы получить результат Я хотел. Было бы только смешно.

Но в чтении this Скотт Гу блогера есть люди в разделе комментариев, которые пробовали этот подход и обнаружили, что он упал. Скотт ответил, запросив электронное письмо о проблеме, которое, как я полагаю, является подтверждением проблемы, но я не вижу разрешения.

Итак, я на этапе моделирования данных, и я действительно не хочу, чтобы на этом треке было много хлопот. Кто-нибудь знает, если это было разрешено или если все еще есть какие-то помехи в подходе find и replace к проблеме схемы «dbo»?

UPDATE:

Так я даже не получить «очень далеко вниз по дорожке», прежде чем выше упал. Очевидно, что достаточно легко настроить базу данных так, чтобы все объекты правильно ссылались друг на друга с использованием новой схемы, но в ней появился весь код поддержки с жесткими ссылками «dbo» в нем ... вместо того, чтобы использовать стандартную схему подключаемой учетной записи пользователя ,

Просто попробуйте использовать VS Studio> Проект | Инструментария ASP.NET CONFIGURATION достаточно, чтобы разбить его. После изменения веб-конфигурации, чтобы указать на новую базу данных с помощью скорректированных схем, а затем перейдите на вкладку «Безопасность» в инструментах конфигурации, я получаю сообщение об ошибке «Не удалось найти хранимую процедуру dbo.aspnet_CheckSchemaVersion». Так появляется «ДБО» испечен в :(

UPDATE 2:.

Так я добавил в синонимами, как указано в принятом ответе и он работает, но я есть .., чтобы ввести 4 записи в базу данных для того, чтобы получить его прокатки, что потребовалось целых 30 секунд;)

Перед этим я получил следующее сообщение об ошибке:

The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'

Так что мне пришлось скопировать строку приложения из таблицы aspnet_Applications. А затем 3 строки из таблицы aspnet_SchemaVersions. Я получил их от установки схемы dbo по умолчанию.

Это был рекорд aspnet_Applications (замаскированный 'хххх' на уникальность - вы должны сделать свой собственный ключ):

/ /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NULL 

Это были aspnet_SchemaVersions записи:

common 1 True 

membership 1 True 

role manager 1 True 

It все работает сейчас. Я обновлю это сообщение, если у меня возникнут какие-либо проблемы в будущем.

ответ

2

В этом случае ответ скорее всего будет заключаться в использовании Sql Server SYNONYMS, которые похожи на псевдонимы.В этой статье How and why should I use SQL Server 2005 synonyms? есть введение в них.

Вы в основном хотите:

CREATE SYNONYM 
    [dbo].[aspnet_CheckSchemaVersion] 
FOR 
    [yourschema].[aspnet_CheckSchemaVersion] 

Для каждого пораженного объекта. Это может занять много времени, так что этот сценарий, вероятно, будет какой-либо пользы:

SELECT 'CREATE SYNONYM [dbo].[' + p.Name + '] FOR [' + s.Name + '].[' + p.Name + ']' FROM sys.Procedures p INNER JOIN 
sys.Schemas s on p.schema_id = s.schema_id 

Вам нужно скопировать вставить вывод вышеприведенного сценария в новое окно сценария и выполнить это. Поэтому идея состоит в том, что вы используете скрипт для генерации других команд сценария.

Если вы затем выполните вывод вышеупомянутого сценария, он затем создаст синонимы для всех процедур в db.

Так, обратите внимание:

  1. Это предполагает, что вы есть БД с только приложения служб проками в нем. Если у вас есть свои собственные procs, вам нужно будет добавить условие WHERE для фильтрации только для объектов Application Services, которые начинаются с «aspnet_», то есть

    WHERE p.name LIKE 'aspnet_%'.

  2. Эта процедура предполагает, что вы уже сделали поиск и заменили, чтобы настроить новую схему. т.е. сгенерировал сценарий базы данных из исходного db, выполнил поиск и заменил ссылки на схемы dbo, затем удалил/отбросил исходные объекты dbo, а затем запустил измененный скрипт, чтобы получить желаемую настройку [schema]. [object] и затем, наконец, используйте сценарии выше.

  3. Стоимость использования SYNONYM зависит от приложения.

Звучит как много неприятностей, но вся процедура, вероятно, займет у вас 3-4 минуты.

1

Выход скрипта выше будет выглядеть следующим образом, так что вы можете просто скопировать вставить это и запустить поиск и замену на ней «yourschema», чтобы получить SYNONYM сценарий сборки:

CREATE SYNONYM [dbo].[aspnet_UnRegisterSchemaVersion] FOR [yourschema].[aspnet_UnRegisterSchemaVersion] 
CREATE SYNONYM [dbo].[aspnet_RegisterSchemaVersion] FOR [yourschema].[aspnet_RegisterSchemaVersion] 
CREATE SYNONYM [dbo].[aspnet_CheckSchemaVersion] FOR [yourschema].[aspnet_CheckSchemaVersion] 
CREATE SYNONYM [dbo].[aspnet_Membership_CreateUser] FOR [yourschema].[aspnet_Membership_CreateUser] 
CREATE SYNONYM [dbo].[aspnet_Profile_SetProperties] FOR [yourschema].[aspnet_Profile_SetProperties] 
CREATE SYNONYM [dbo].[aspnet_Roles_CreateRole] FOR [yourschema].[aspnet_Roles_CreateRole] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAllUsers_ResetPageSettings] FOR [yourschema].[aspnet_PersonalizationAllUsers_ResetPageSettings] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAllUsers_SetPageSettings] FOR [yourschema].[aspnet_PersonalizationAllUsers_SetPageSettings] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAllUsers_GetPageSettings] FOR [yourschema].[aspnet_PersonalizationAllUsers_GetPageSettings] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAdministration_GetCountOfState] FOR [yourschema].[aspnet_PersonalizationAdministration_GetCountOfState] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAdministration_ResetSharedState] FOR [yourschema].[aspnet_PersonalizationAdministration_ResetSharedState] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAdministration_ResetUserState] FOR [yourschema].[aspnet_PersonalizationAdministration_ResetUserState] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationPerUser_GetPageSettings] FOR [yourschema].[aspnet_PersonalizationPerUser_GetPageSettings] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationPerUser_ResetPageSettings] FOR [yourschema].[aspnet_PersonalizationPerUser_ResetPageSettings] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationPerUser_SetPageSettings] FOR [yourschema].[aspnet_PersonalizationPerUser_SetPageSettings] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAdministration_DeleteAllState] FOR [yourschema].[aspnet_PersonalizationAdministration_DeleteAllState] 
CREATE SYNONYM [dbo].[aspnet_PersonalizationAdministration_FindState] FOR [yourschema].[aspnet_PersonalizationAdministration_FindState] 
CREATE SYNONYM [dbo].[aspnet_Profile_DeleteProfiles] FOR [yourschema].[aspnet_Profile_DeleteProfiles] 
CREATE SYNONYM [dbo].[aspnet_Setup_RestorePermissions] FOR [yourschema].[aspnet_Setup_RestorePermissions] 
CREATE SYNONYM [dbo].[aspnet_Setup_RemoveAllRoleMembers] FOR [yourschema].[aspnet_Setup_RemoveAllRoleMembers] 
CREATE SYNONYM [dbo].[aspnet_Membership_FindUsersByName] FOR [yourschema].[aspnet_Membership_FindUsersByName] 
CREATE SYNONYM [dbo].[aspnet_Membership_FindUsersByEmail] FOR [yourschema].[aspnet_Membership_FindUsersByEmail] 
CREATE SYNONYM [dbo].[aspnet_AnyDataInTables] FOR [yourschema].[aspnet_AnyDataInTables] 
CREATE SYNONYM [dbo].[aspnet_Applications_CreateApplication] FOR [yourschema].[aspnet_Applications_CreateApplication] 
CREATE SYNONYM [dbo].[aspnet_Users_DeleteUser] FOR [yourschema].[aspnet_Users_DeleteUser] 
CREATE SYNONYM [dbo].[aspnet_Users_CreateUser] FOR [yourschema].[aspnet_Users_CreateUser] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetUserByName] FOR [yourschema].[aspnet_Membership_GetUserByName] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetUserByUserId] FOR [yourschema].[aspnet_Membership_GetUserByUserId] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetUserByEmail] FOR [yourschema].[aspnet_Membership_GetUserByEmail] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetPasswordWithFormat] FOR [yourschema].[aspnet_Membership_GetPasswordWithFormat] 
CREATE SYNONYM [dbo].[aspnet_Membership_UpdateUserInfo] FOR [yourschema].[aspnet_Membership_UpdateUserInfo] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetPassword] FOR [yourschema].[aspnet_Membership_GetPassword] 
CREATE SYNONYM [dbo].[aspnet_Membership_SetPassword] FOR [yourschema].[aspnet_Membership_SetPassword] 
CREATE SYNONYM [dbo].[aspnet_Membership_ResetPassword] FOR [yourschema].[aspnet_Membership_ResetPassword] 
CREATE SYNONYM [dbo].[aspnet_Membership_UnlockUser] FOR [yourschema].[aspnet_Membership_UnlockUser] 
CREATE SYNONYM [dbo].[aspnet_Membership_UpdateUser] FOR [yourschema].[aspnet_Membership_UpdateUser] 
CREATE SYNONYM [dbo].[aspnet_Membership_ChangePasswordQuestionAndAnswer] FOR [yourschema].[aspnet_Membership_ChangePasswordQuestionAndAnswer] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetNumberOfUsersOnline] FOR [yourschema].[aspnet_Membership_GetNumberOfUsersOnline] 
CREATE SYNONYM [dbo].[aspnet_Profile_DeleteInactiveProfiles] FOR [yourschema].[aspnet_Profile_DeleteInactiveProfiles] 
CREATE SYNONYM [dbo].[aspnet_Profile_GetNumberOfInactiveProfiles] FOR [yourschema].[aspnet_Profile_GetNumberOfInactiveProfiles] 
CREATE SYNONYM [dbo].[aspnet_Profile_GetProfiles] FOR [yourschema].[aspnet_Profile_GetProfiles] 
CREATE SYNONYM [dbo].[aspnet_UsersInRoles_IsUserInRole] FOR [yourschema].[aspnet_UsersInRoles_IsUserInRole] 
CREATE SYNONYM [dbo].[aspnet_UsersInRoles_GetRolesForUser] FOR [yourschema].[aspnet_UsersInRoles_GetRolesForUser] 
CREATE SYNONYM [dbo].[aspnet_Roles_DeleteRole] FOR [yourschema].[aspnet_Roles_DeleteRole] 
CREATE SYNONYM [dbo].[aspnet_Roles_RoleExists] FOR [yourschema].[aspnet_Roles_RoleExists] 
CREATE SYNONYM [dbo].[aspnet_Roles_GetAllRoles] FOR [yourschema].[aspnet_Roles_GetAllRoles] 
CREATE SYNONYM [dbo].[aspnet_UsersInRoles_AddUsersToRoles] FOR [yourschema].[aspnet_UsersInRoles_AddUsersToRoles] 
CREATE SYNONYM [dbo].[aspnet_UsersInRoles_RemoveUsersFromRoles] FOR [yourschema].[aspnet_UsersInRoles_RemoveUsersFromRoles] 
CREATE SYNONYM [dbo].[aspnet_UsersInRoles_GetUsersInRoles] FOR [yourschema].[aspnet_UsersInRoles_GetUsersInRoles] 
CREATE SYNONYM [dbo].[aspnet_UsersInRoles_FindUsersInRole] FOR [yourschema].[aspnet_UsersInRoles_FindUsersInRole] 
CREATE SYNONYM [dbo].[aspnet_Profile_GetProperties] FOR [yourschema].[aspnet_Profile_GetProperties] 
CREATE SYNONYM [dbo].[aspnet_Paths_CreatePath] FOR [yourschema].[aspnet_Paths_CreatePath] 
CREATE SYNONYM [dbo].[aspnet_WebEvent_LogEvent] FOR [yourschema].[aspnet_WebEvent_LogEvent] 
CREATE SYNONYM [dbo].[aspnet_Personalization_GetApplicationId] FOR [yourschema].[aspnet_Personalization_GetApplicationId] 
CREATE SYNONYM [dbo].[aspnet_Membership_GetAllUsers] FOR [yourschema].[aspnet_Membership_GetAllUsers]