Контроль доступа и пользовательская информация в основной базе данных - PullRequest
2 голосов
/ 02 февраля 2012

У нас есть одна база данных для выполнения наших операций.Приложение извлекает записи из базы данных Oracle, и MSSQL обрабатывает эти записи, сопоставляет их с биометрическими машинными данными и затем сохраняет эту информацию в MSSQL.На компьютере разработчика у меня установлен sql-express 2008, а на производственном сервере установлен Sql Server 2005.Мне нужно хранить учетные записи пользователей с их деталями аутентификации, ролями, а также устанавливать отношения между пользователями с другими объектами.

Есть ли способ сопоставить таблицу пользователей с моделью EF, чтобы мы могли связать ее сдругие объекты?

- Можем ли мы сделать ASPNETDB.MDF основной базой данных для всех объектов?

- Можем ли мы перенести роли пользователя, профили пользователя, информацию о членстве и соответствующую хранимую процедуру из ASPNETDB в другую базу данных?

РЕДАКТИРОВАТЬ:

Я нашел эту статью http://www.asp.net/mvc/tutorials/older-versions/security/authenticating-users-with-forms-authentication-cs, которая помогает мне выяснить способ оснащения любой базы данных SQL-сервера членством, пользователем, таблицами профилей и хранимой процедурой, используя * 1020.* утилита aspnet_regsql .

Обновление:

В AccountsModel я создал класс AccountDetails.

public class AccountDetails : ProfileBase
{
    public int TerminalId { get; set; }
}

& inTerminalModel:

public ICollection<AccountDetails> UserProfiles { get; set; }

На самом деле мне просто нужен дополнительный атрибут (FK) TerminalId в таблице Users.Но в документации предлагается добавить атрибут в таблицу User, нам нужно использовать профиль.Итак, с помощью приведенного выше кода, как получить коллекцию MembershipUser из UserProfiles?Должен ли я перебрать коллекцию или есть какой-нибудь изящный способ выполнения операции ... что-то вроде:

public static ICollection<MembershipUser> GetUsersFromProfiles(ICollection<AccountDetails> mProfiles)
{
     /* it is not accepting the Membership.GetAllUsers()... 
        Error: "Could not find an implementation of the query pattern for source
        type 'System.Web.Security.MembershipUserCollection'.  'Where' not found.
        Consider explicitly specifying the type of the range variable 'm'.*/
     return (from m in Membership.GetAllUsers()
             where m.UserName = mProfiles.SelectMany(profile=>profile.UserName)
             select m);
}

Когда я пытаюсь сохранить запись в методе ConvertToTerminalArray:

public class Terminal
{
    [Key]
    public int Id { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
    [Display(Name = "Terminal Name")]
    public string TerminalName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
    [Display(Name = "Location")]
    public string Location { get; set; }

    public static Terminal[] ConvertToTerminalArray(string terminalName = "Tango 1")
    {
        ApplicationServices db = new ApplicationServices();
     //   var dsd=new CreateDatabaseIfNotExists<ApplicationServices>();
     //   dsd.InitializeDatabase(db);
        Terminal [] terminal = new Terminal[1];
        terminal[0] = new Terminal();
        terminal[0].TerminalName=terminalName;
        terminal[0].Location = "South West Coast";
        db.Terminals.Add(terminal[0]);
        db.SaveChanges();

        return terminal;

    }

}

Это дает мне эту ошибку:

Неверное имя объекта 'dbo.Terminals'.Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: неверное имя объекта 'dbo.Terminals'.

Ошибка источника:

Строка 34: терминал [0]. Расположение= "Юго-западное побережье";Строка 35: db.Terminals.Add (терминал [0]);Строка 36:
db.SaveChanges ();Строка 37: Строка 38: возвратный терминал;

ApplicationServices (контекст) выглядит следующим образом:

public class ApplicationServices : DbContext
{
    public ApplicationServices()
    {
        Database.SetInitializer(new CreateDatabaseIfNotExists<ApplicationServices>());
    }

    public DbSet<Terminal> Terminals { get; set; }
}

Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...