2013-03-27 4 views
2

Я пытаюсь выяснить, как настроить ASP.Net MVC 4 в простое членство. Таблицы, в которых размещаются пользователи в моей текущей базе данных, имеют другую схему, а затем «dbo». Как я могу указать схему при инициализации подключения к базе данных:ASP.Net MVC 4 Простое членство указать схему

  WebSecurity.InitializeDatabaseConnection 
      (
       connectionStringName: "GuessAListConnection", 
       userTableName: "UserProfile", 
       userIdColumn: "UserId", 
       userNameColumn: "UserName", 
       autoCreateTables: false 
      ); 

Нет схемы. Я попытался добавить схему к userTableName, но это вызывает ошибку. Какие-либо предложения?

Благодаря

Том

+1

Посмотрите эту тему:

ответ

1

WebSecurity будет использовать любую схему по умолчанию пользователя базы данных. Невозможно указать другую схему, о которой я знаю.

1

Я нашел другое решение, если у вас есть ваши таблицы пользователя/аутентификации в другой схеме, чем dbo (или что-то вроде схемы по умолчанию для пользователя базы данных), и это должно использовать представление.

В моей базе данных мои таблицы пользователя/аутентификации привязаны к схеме «Безопасность». У меня также есть схема Person, в которой живет таблица Person. Я храню только таблицу FirstName, LastName in Person.

Я создал представление, которое тянет все таблицы вместе для аутентификации и возвращает следующие поля:

UserId, UserName, PersonId, FirstName, LastName, AuthenticationType, LastLoginDate, IsLockedOut

В моем приложении , Я могу аутентифицировать человека несколькими различными способами: форма, Windows, Facebook, Twitter и т. Д. UserId, UserName относятся к другому типу аутентификации.

Вот мой UserProfile класс в ASP.Net MVC:

[Table("__vwRegisteredUser")] 
    public class UserProfile 
    { 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public String UserName { get; set; } 
    public int PersonId { get; set; } 
    public String FirstName { get; set; } 
    public String LastName { get; set; } 
    public String AuthenticationTypeName { get; set; } 
    public Boolean IsLockedOut { get; set; } 
    public DateTime LastLoginDate { get; set; } 

    public int Id 
    { 
     get 
     { 
      return PersonId; 
     } 
    } 

    public String Name 
    { 
     get 
     { 
      return String.Format("{0} {1}", FirstName, LastName); 
     } 
    } 
} 

Примечание Я использую представление для атрибута таблицы. Я также возвращаю PersonId как свойство Id и объединяю FirstName и LastName вместе как свойство Name. UserName - это значение, возвращаемое из моего типа аутентификации (имя пользователя Windows, адрес электронной почты, если я использую аутентификацию по Формам, или что-то вроде Facebook или Twitter). Таким образом, нет никакой последовательности для UserName из моей таблицы Security.Authentication.

Для инициализации подключения к базе данных по-прежнему требуется таблица, чтобы SimpleMembership генерировал таблицы членства. Возможно, есть способ создать пользовательскую таблицу, но я еще не понял этого.