我正在使用SimpleMembership(http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx),但我无法将自定义用户表放在除dbo之外的架构中。
例如,此调用将固执地创建一个名为“dbo.MySchema.User”的表
WebSecurity.InitializeDatabaseConnection(connectionStringName: "ApplicationServices", userTableName: "MySchema.User", userIdColumn: "ID", userNameColumn: "Username", autoCreateTables: true);
我也尝试手动创建表,但是在运行查询时,库仍然会尝试附加“dbo”。
我需要自定义提供商吗?我不是100%肯定我是否会使用SimpleMembership,但它可以省去编写一堆用户/授权代码的麻烦。
http://msdn.microsoft.com/en-us/library/gg569134(v=VS.99).aspx
答案 0 :(得分:8)
我为用户使用自己的架构。
我的表名为CORE.PROFILES
,使用websecurity我有一个SQL同义词dbo.PROFILES
。
要在SQL Server中运行此语句:
CREATE SYNONYM dbo.profiles FOR core.profiles;
我希望这对你有所帮助。
答案 1 :(得分:4)
WebMatrix.WebData程序集的2.0.0.0版生成其create table
语句,如下所示。
"CREATE TABLE " + this.SafeUserTableName + "(" + this.SafeUserIdColumn + " int NOT NULL PRIMARY KEY IDENTITY, " + this.SafeUserNameColumn + " nvarchar(56) NOT NULL UNIQUE)"
SafeUserTableName
具有以下实施方式。
return "[" + this.UserTableName + "]";
正如@anderly所假设的那样,结果将是表格将在连接字符串中的用户的默认架构中创建。
出于同样的原因,在运行时,SafeUserTableName方法的实现会导致UserTableName参数的全部内容被解释为表名 - 在默认模式中。
因此,SimpleMembershipProvider要求用户表处于默认架构中。答案 2 :(得分:4)
试试这个:
WebSecurity.InitializeDatabaseConnection(connectionStringName: "ApplicationServices", userTableName: "MySchema].[User", userIdColumn: "ID", userNameColumn: "Username", autoCreateTables: true);
答案 3 :(得分:0)
我认为关键是它将使用与您的用户ID关联的默认架构。在SQL Server中,您可以尝试为您的用户帐户指定除dbo之外的默认架构,然后我认为它将在该架构中创建表,但我认为您不能在调用InitializeDatabaseConnection时指定架构。