4

Я использую vs2013 и используя asp.net mvc 5 для создания своего веб-приложения. чтобы сделать индивидуальную аутентификацию, я использую Идентификатор 2.0.
, когда я создал мой Entitymodel.edmx, он автоматически генерируется новая строка подключения к моей БД в web.config, как здесь:Подключить ASP.net Identity 2.0 к уже существующей базе данных

<add name="myEntities" connectionString="metadata=res://*/Models.mEntity.csdl|res://*/Models.mEntity.ssdl|res://*/Models.mEntity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Shop.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

я полагаю Идентичность использует код первого подхода к мак базы данных и подключается к другая строка подключения (DefaultConnection), как:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-testauthentication-20151116011628.mdf;Initial Catalog=aspnet-testauthentication-20151116011628;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 

так как результат, когда я первый запустить проект создает новый файл .mdf с именем

САШ-testauthentication-20151116011628.mdf

и создавать таблицы в ней. но я хочу сделать Идентификатор подключитесь к моему уже созданному db по имени: Shop.mdf и создайте в нем свою таблицу. поэтому я кладу имя соединения строки в ApplicationDbContext классе в IdentityModel.cs, как здесь:

public ApplicationDbContext() 
     : base("myEntities", throwIfV1Schema: false) 
{ 
} 

, но я получаю следующее сообщение об ошибке:

Тип объект ApplicationUser не является частью модели для тока контекст.

так что это правильный и правильный способ сделать это?

Большого спасибо

UPDATE:
я создал таблицу идентичности в точности с тем же именем в моих существующих базах данных и DefaultConnection для подключения к существующей базе данных, и теперь я получаю эту ошибку:

Невозможно создать файл 'c: \ users \ mohamad \ documents \ visual studio 2013 \ Projects \ Shop \ Shop \ App_Data \ Shop.mdf', потому что он уже существует. Измените путь к файлу или имя файла и повторите операцию. CREATE DATABASE не удалось. Некоторые имена файлов не могут быть созданы.

Почему, когда в нем есть база данных и даже таблица, личность пытается создать базу данных?

Решение:
пункт 1: кажется, личность не имеет проблем с подключением к уже существующей базе данных, он может хорошо Подключается к ней и создает это таблица на нем.

пункт 2: проблема я имел: я не знаю, что было причиной моей проблемы, но я сделал следующие шаги и проблемы решены:

  1. удалить всю таблицу из модели.EDMX
  2. удалить model.edmx
  3. модель возрожденного EDMX и строку соединения, а также, то я добавил таблицы к нему
  4. DefalutConnection строки точек точно таким же .mdf файл, который строка Entity Connection делать.
  5. запустить проект и зарегистрироваться, и все идет хорошо.
  6. начальный каталог в строке подключения должен быть заполнены

, если вам нужно добавить еще одно свойства в дополнении к существующему свойству идентичности как имя, город и .... сделай следующий шаг и бег проект и зарегистрировать:

  1. в IdentityModel.cs файл добавить свойства в ApplicationUser класс:

    public class ApplicationUser : IdentityUser { public string Adress { get; set; } public DateTime DateOfBirth { get; set; } .... }

  2. в AccountViewModel.cs в RegisterViewModel классе добавить точно такое же свойство и присвоить их атрибут, как [Requierd]
  3. в AccountController.cs в Register действии добавить свойства, как это:

    var user = new ApplicationUser() { UserName = model.Email, Email = model.Email ,Adress=model.Adress};

  4. добавить связанный html в регистр просмотра

веселит

ответ

1

У вас есть два варианта. Вы можете либо присвоить Identity отдельную базу данных, которая настроена с использованием кода First, а затем использовать вашу существующую базу данных через второй контекст или вы можете просто создать таблицы потребностей Identity в вашей существующей базе данных вручную. Вы не сможете автоматически генерировать их.

С первым вариантом вы не сможете создавать отношения между любыми объектами и сущностями Identity, происходящими из существующей базы данных, то есть без свойств навигации и внешних ключей. Вы все равно можете сохранить идентификатор пользователя в стандартном столбце, а затем вручную использовать его для поиска соответствующего пользователя из контекста Identity.

Со вторым вариантом вам просто нужно знать, какие таблицы необходимо создать. Для этого вы можете разрешить создание таблиц через Code First, а затем просто переместить схему в существующую базу данных, прежде чем удалять контекст Identity и обновить EDMX.

Кроме того, для этого стоит избегать использования EDMX на этом этапе. Он устарел, и вся поддержка для него будет удалена из EF7. Команда EF обязалась продолжать поддерживать EF6 с исправлениями безопасности и исправлениями ошибок, но вы по-прежнему просто откладываете неизбежное. Несмотря на кажущееся противоречивое имя, Code First может использовать с существующей базой данных, и это, безусловно, предпочтительный метод работы с существующими базами данных с EF.

+0

Был другой проект в asp.net (not mvc) я использовал Identity for Authentication, и я просто установил connectionsting: 'UserStore userStore = новый UserStore (); userStore.Context.Database.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings ["ConnectionString"]. ConnectionString; 'и identity генерируют таблицу в мою базу данных. я просто хочу, чтобы они были в моем существующем db не в модели .edmx, я уверен, что должен быть способ –