2014-06-18 6 views
1

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이는 상태가 발생합니다 "가 읽기 전용 있기 때문에 재산 '이름'의 값을 설정할 수 없습니다."

그럼 올바른 방법은 무엇입니까?

답변

0

역할의 이름을 변경할 수 없습니다. 여기에는 몇 가지 이유가 있습니다. 1. LightSwitch는 역할의 이름을 바꾸는 API를 제공하지 않는 ASP.NET의 Membership/Role 시스템에서 역할 구현을 기반으로합니다. 2. 기본 키이고 LightSwitch가 기본 키 값을 변경할 수 없으므로 Name 속성을 업데이트 할 수 없습니다.

대신 역할을 삭제하고 새 역할을 추가하여 역할을 대체해야합니다.

0

이것은 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 

TOO BAD!