Я хочу переместить пользователей и сообщения от существующего форума, который я использую для таблицы членства ASP.NET, не используя CreateUser. В основном я хочу поддержать идентификаторы пользователей так, чтобы, когда я перемещаю сообщения, они продолжили связываться с корректными пользователями. Существует ли способ сделать это, или я был бы более обеспечен просто использование CreateUser и затем нахождение способа повторно присвоить пост идентификаторами пользователей корректным новым идентификаторам?
Спасибо
Вы можете создать таблицу UserProfile, которую можно использовать для соединения таблицы User с таблицей Post. Это изолирует вас от внутренних компонентов ASP.NET Membership Provider и может стать точкой расширения для дополнительной информации о пользователе.
Вот хранимая процедура и связанные с ней функции, которые я использую для создания новых пользователей и их профилей:
CREATE PROCEDURE [dbo].[CreateUser]
@UserName nvarchar(256)
, @ClearTextPassword nvarchar(128)
, @Email nvarchar(256)
, @PostingID uniqueidentifier
AS
BEGIN
DECLARE @ApplicationName nvarchar(256)
DECLARE @PasswordFormat int
DECLARE @UnencodedSalt uniqueidentifier
DECLARE @Password nvarchar(128)
DECLARE @PasswordSalt nvarchar(128)
DECLARE @Now DATETIME
DECLARE @UniqueEmail int
SET @ApplicationName = 'YOUR_APPLICATION_NAME'
SET @PasswordFormat = 1
SET @UnencodedSalt = NEWID()
SET @PasswordSalt = dbo.base64_encode(@UnencodedSalt)
SET @Password = dbo.base64_encode(HASHBYTES('SHA1',
CAST(@UnencodedSalt as varbinary(MAX))
+ CAST(@ClearTextPassword AS varbinary(MAX)) ))
SET @Now = getutcdate()
SET @UniqueEmail = 1
BEGIN TRANSACTION
DECLARE @UserId uniqueidentifier
EXECUTE [dbo].[aspnet_Membership_CreateUser]
@ApplicationName
,@UserName
,@Password
,@PasswordSalt
,@Email
,NULL
,NULL
,1
,@Now
,@Now
,@UniqueEmail
,@PasswordFormat
,@UserId OUTPUT
INSERT INTO [dbo].[UserProfile]
(
[UserID]
,[PostingID]
)
VALUES
(
@UserId
,@PostingID
)
COMMIT
CREATE FUNCTION [dbo].[base64_decode]
(@base64_text VARCHAR(max))
RETURNS VARBINARY(max)
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
BEGIN
DECLARE @x XML; SET @x = @base64_text
RETURN @x.value('(/)[1]', 'VARBINARY(max)')
END
CREATE FUNCTION [dbo].[base64_encode]
(@data VARBINARY(max))
RETURNS VARCHAR(max)
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
BEGIN
RETURN (
SELECT [text()] = @data
FOR XML PATH('')
)
END
Я бы создал таблицу связи между таблицей пользователя и таблицей членства в ASP, в которой идентификатор членства (адрес электронной почты?) Будет связан с идентификатором пользователя (целое число?). Затем я бы построил процедуру для создания пользователей и программного заполнения таблицы членства данными пользователей - это немного проще сделать с помощью кода .NET.