4

Я строю код MVC3 EF Первое приложение на базе SQLExpress DB. Для меня очень важно, что базы данных автоматически генерируются всякий раз, когда изменяется схема или что-то в этом роде. Теперь я добавляю аутентификацию в свое приложение, и я просмотрел структуру аутентификации, которая поставляется с MVC. Однако, как мне кажется, мне нужно запускать aspnet_regsql.exe каждый раз при создании новой базы данных. Мне действительно нужны таблицы аутентификации в той же базе данных, что и база данных приложений.MVC3: Код EF Сначала и аутентификация

Я в основном интересуюсь, какие у меня варианты;

  • Возможно ли использовать систему аутентификации и автоматически ее сгенерировать так же, как инфраструктура Entity генерирует мои другие данные?
  • Если бы не было прав для меня написать мою собственную аутентификацию, но есть ли еще части, которые я могу использовать? другими словами, мне нужно написать пользовательский поставщик членства или что-то в этом роде? Я хотел бы продолжать использовать атрибуты [аутентифицировать] и т. Д.

Я мог бы использовать некоторые указатели в правильном направлении.

ответ

3

Вы могли бы начать с CodeFirst Membership Provider - который является пользовательский поставщик, основанный на коде сначала - и расширьте это, если (также прочитайте рекомендуемое использование на сайте).

Вышеупомянутый IMO лучший способ, поскольку вы можете действительно интегрировать два (и, например, в случае, если вам может потребоваться доступ, например, к таблицам членства напрямую, относятся к вашим собственным таблицам пользователей/клиентов и т. Д.).

Но и у вас есть другие варианты ...

а) писать собственный Db инициализатору и Seed-ную базу данных (например, то, что предлагается здесь https://stackoverflow.com/a/5462981/417747.Примечание: вы можете использовать различные подходы, от запуска САШ таблиц SQL скрипта для создания модели для сети САШ, таблиц и т.д.) или

б) использовать Db инициализатор, которые «консервирования» базы данных - и подготовить базу данных с помощью таблиц первой записи ASPNET

c) (последнее, но не менее важное) использование миграции (как справедливо предлагается @Chris). Миграции довольно мощные. Вы можете запустить Update-Database -Script для генерации SQL вместо изменения Db, а затем объединить его (с помощью скрипта aspnet или seed-ed db) и использовать его для создания или обновления db. Миграции требуют некоторого обучения, но снова стоит усилий для чего-то более сложного.

надеюсь, что это помогает

3

Вы можете переопределить метод семян вашей DbMigrationsConfiguration или создать миграцию.

Затем вы можете выполнить SQL, который может быть сгенерирован из aspnet_regsql.exe или выполнить aspnet_regsql.exe, предоставляя вам разрешение.

UPDATE 1:

Я закончил тем, что делал следующим образом:

Add-Migration AspNetRegSql 

public partial class AspNetRegSql : DbMigration 
{ 
    public override void Up() 
    { 
     Migrate(false); 
    } 

    public override void Down() 
    { 
     Migrate(true); 
    } 

    private static void Migrate(bool down) 
    { 
     var action = down ? "R" : "A"; 
     var connectionstring = ConfigurationManager.ConnectionStrings["DataContext"]; 
     var arguments = string.Format(@"-Q -C ""{0}"" -{1} mrp", connectionstring, action); 

     var processStartInfo = new ProcessStartInfo 
     { 
      WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Replace(@"file:\", string.Empty), 
      FileName = "aspnet_regsql.exe", 
      Arguments = arguments, 
      CreateNoWindow = true, 
      WindowStyle = ProcessWindowStyle.Hidden 
     }; 

     using (var process = Process.Start(processStartInfo)) 
     { 
      process.WaitForExit(); 
     } 
    } 
} 

Затем добавил: "aspnet_regsql.exe" в мой проект и изменил строить действие на "Копировать если новее".

UPDATE 2:

я не был осведомлен о библиотеке, NSGaga публикуемую - Я не смотрел на него, но рекомендовал бы вам также рассмотреть его.

UPDATE 3:

Некоторые полезные ссылки:

+0

выглядит хорошо, как хорошо - может быть, это лучше поместить в «семя», то есть при создании БД в первый раз (или миграции должен быть первоначальный один) - и из-за возможные проблемы с разрешениями (я не пробовал это, но выгляжу очень неплохим сценарием, например, для запуска пользовательских пакетных файлов и более общих) - т.е. проще управлять им из семени - чем, например, консоль PM, так как это обычно инициируется с PM (откровенно говоря, я понятия не имею, как это может произойти в некоторых случаях - хотя, вероятно, должно работать), я обычно запускаю VS как администратор, поэтому вряд ли увидим какие-либо проблемы). – NSGaga

Смежные вопросы