2014-06-18 32 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將角色實現基於ASP.NET的Membership/Role系統,該系統不提供重命名角色的API。 2. Name屬性無法更新,因爲它是主鍵,而LightSwitch不允許更改主鍵的值。

相反,您需要刪除該角色並添加一個新角色來替換它。

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 

太牛了!