【问题标题】:WebSecurity.InitializeDatabaseConnection - How specify a db schema?WebSecurity.InitializeDatabaseConnection - 如何指定数据库架构?
【发布时间】:2011-06-05 16:14:43
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: asp.net webmatrix


    【解决方案1】:

    我为用户使用自己的架构。

    我的表名为 CORE.PROFILES,为了与 websecurity 一起使用,我有一个 SQL 同义词 dbo.PROFILES

    为此,在 SQL Server 中运行以下语句:

    CREATE SYNONYM dbo.profiles FOR core.profiles;
    

    希望对你有所帮助。

    【讨论】:

    • 移除成员默认表依赖的优秀解决方案。谢谢!
    【解决方案2】:

    2.0.0.0 版的 WebMatrix.WebData 程序集生成其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 要求用户表位于默认架构中。

    【讨论】:

      【解决方案3】:

      试试这个:

      WebSecurity.InitializeDatabaseConnection(connectionStringName: "ApplicationServices", userTableName: "MySchema].[User", userIdColumn: "ID", userNameColumn: "Username", autoCreateTables: true);
      

      【讨论】:

      • 这对我有用。这是一个聪明的黑客。但是,如果您已经创建了表,则 autoCreateTables 必须设置为 false,否则它会尝试创建已经存在的表。
      【解决方案4】:

      我认为关键是它将使用与您的用户 ID 关联的任何默认架构。在 SQL Server 中,您可以尝试为您的用户帐户指定除 dbo 以外的默认架构,然后我认为它将在该架构中创建表,但我认为您不能在调用 InitializeDatabaseConnection 时指定架构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 2018-07-09
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多