Переименовать роль в Lightswitch

#visual-studio-lightswitch

#visual-studio-lightswitch

Вопрос:

Как переименовать имя роли в рабочем пространстве данных securityData в Lightswitch?

 //Lookup the role, and rename it, or create one if none exist.
var rolesQuery = this.DataWorkspace.SecurityData.Roles.Where(r => r.Name.StartsWith(oldRoleNameString)).Execute();
Role role = rolesQuery.Any() ? rolesQuery.Single() : this.DataWorkspace.SecurityData.Roles.AddNew();
role.Name = "OtherName";
  

Выдается исключение InvalidOperationException, в котором указано «Невозможно установить значение свойства ‘Name’, поскольку оно доступно только для чтения».

Итак, каков правильный способ сделать это тогда?

Ответ №1:

Переименование ролей невозможно. Для этого есть несколько причин: 1. LightSwitch основывает реализацию роли на ASP.NET система членства / ролей, которая не предоставляет API для переименования ролей. 2. Свойство Name не может быть обновлено, поскольку оно является первичным ключом, а LightSwitch не позволяет изменять значения первичных ключей.

Вместо этого вам нужно будет удалить роль и добавить новую, чтобы заменить ее.

Ответ №2:

Это ошибка в asp.net на роли ссылаются по имени, даже если в базовой модели данных таблица asp_net_Roles использует столбец GUID в качестве первичного ключа:

 /****** Object:  Table [dbo].[aspnet_Roles]    Script Date: 26.01.2015 13:56:15 ******/
SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[aspnet_Roles](
    [ApplicationId] [uniqueidentifier] NOT NULL,
    [RoleId] [uniqueidentifier] NOT NULL DEFAULT (newid()),
    [RoleName] [nvarchar](256) NOT NULL,
    [LoweredRoleName] [nvarchar](256) NOT NULL,
    [Description] [nvarchar](256) NULL,
 CONSTRAINT [PK_aspnet_Roles_RoleId] PRIMARY KEY NONCLUSTERED 
(
    [RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[aspnet_Roles]  WITH CHECK ADD  CONSTRAINT [FK_aspnet_Roles_ApplicationId_aspnet_Applications_ApplicationId] FOREIGN KEY([ApplicationId])
REFERENCES [dbo].[aspnet_Applications] ([ApplicationId])
GO

ALTER TABLE [dbo].[aspnet_Roles] CHECK CONSTRAINT [FK_aspnet_Roles_ApplicationId_aspnet_Applications_ApplicationId]
GO
  

ОЧЕНЬ ЖАЛЬ!