Как создать новый проект MVC с первым подходом EF6 Db в VS 2015

Я хочу создать новый проект MVC с EF, чтобы использовать первый подход к базе данных.

Поэтому я создал новый проект MVC 5.2.3 в Visual Studio 2015 с помощью мастера, который создал по умолчанию учетную запись и модели управления пользователями, контроллеры и представления.

Строка подключения является своего рода

Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-MyProject-20161112112119.mdf;Initial Catalog=aspnet-MyProject-20161112112119;Integrated Security=True" providerName="System.Data.SqlClient

И у меня есть несколько вопросов здесь:

  1. В папке App_Data моего проекта нет файла mdf, поэтому я понятия не имею, куда, черт возьми, делась база данных.

  2. Я предполагаю, что приложение использует подход Code first по умолчанию, поэтому, очевидно, я хотел бы его изменить. Идея состоит в том, чтобы просто скопировать таблицы из внутренней базы данных проекта, созданной при настройке, и добавить их в мою новую базу данных, которую я буду использовать для первого подхода к базе данных. Но я не могу найти существующую базу данных приложения (см. пункт 1).

  3. Я могу подключиться к серверу, который используется в строке подключения выше ((LocalDb)\MSSQLLocalDB) через Management Studio, но у него вообще нет баз данных, даже той, которая указана в строке подключения. И файла нет в папке App_Data

  4. Поэтому я создал новую базу данных MyProjectDb на своем сервере localhost с помощью Sql Server Management Studio с намерением использовать ее для первого подхода к базе данных.

  5. Я создал новый проект MyProject.Database в своем решении, чтобы использовать только что созданную базу данных MyProjectDb.

  6. Я проверил и вижу, что строка базы данных в свойствах проекта MyProject.Database имеет источник данных connstring как (LocalDb)/ProjectsV13 вместо localhost. Вопрос почему такой странный источник, а не мой localhost? И как заставить новый проект db создать базу данных на сервере localhost?

  7. Затем я изменил свойства проекта базы данных (вкладка «Отладка») для использования в строке подключения localhost в качестве источника данных и новой созданной базы данных MyProjectDb.

  8. Теперь я щелкаю правой кнопкой мыши проект моей базы данных MyProject.Database: добавить> новый элемент> Таблица. Я создал таблицу.

  9. Теперь я вижу базу данных в обозревателе объектов SQL Server в папке Projects-MyProject, а также вижу базу данных MyProjectDb, которую я создал на своем сервере localhost в SQL Server Management Studio. У первого есть таблица, которую я создал, у второго ее нет в разделе «Таблицы» (конечно, я обновил таблицы). Это странно, и я смущен, действительно ли это одни и те же базы данных или каким-то образом VS скопировал базу данных вместо использования той, которую я создал?

  10. Я щелкаю правой кнопкой мыши свой веб-проект в обозревателе решений: добавить> новый элемент> данные> модель данных объекта ADO.NET, я даю имя, на следующем экране я выбираю параметр EF Designer from database. Я нажимаю «Далее» и попадаю на экран, где я могу создать New connection. Я нажимаю на это, и единственный сервер, который я могу выбрать из списка, — это сервер NICKO-PC. (Помните: проект db, который я создал в VS, по умолчанию использует сервер (LocalDb)?ProjectsV13). Если я попытаюсь вставить localhost или что-то еще, он изменится обратно на NICKO-PC, но я думаю, что это все равно то же самое, что и сервер localhost, потому что когда я расширяю доступные базы данных, моя база данных MyProjectDb есть в списке. Поэтому я выбираю его и иду дальше.

  11. Я получаю Choose Your Database Objects And Settings экран. И теперь я не вижу свою таблицу, созданную с помощью моего проекта MyProject.Database. Нет таблицы, чтобы выбрать, чтобы быть более точным. Поэтому, очевидно, я не могу создавать объекты базы данных для использования в своем приложении.

Я застрял.

Надеюсь, мое описание событий не сбивает с толку.

Может ли кто-нибудь умный помочь мне сделать то, что я хочу, пожалуйста?

  1. Я не знаю, почему веб-проект использовал файл db на каком-то странном сервере (LocalDb)\MSSQLLocalDB, а проект базы данных вместо этого создает его под (LocalDb)/ProjectsV13?

  2. Как я могу создать свою собственную новую базу данных и использовать ее как для веб-приложения, так и для проекта базы данных, а затем создавать объекты на основе подхода db first?

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

Это в основном то, что мне нужно.

Пожалуйста, дайте мне знать, как вы создаете проект, используя подход Db First, потому что я ничего не получаю с мастерами студии VS.

Спасибо

* ИЗМЕНИТЬ *

Мой класс DbContext довольно прост и создан проектом MVC, который я установил вместе с пользовательскими моделями:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

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


person nickornotto    schedule 18.11.2016    source источник
comment
Вы сделали какие-либо учебники для этого?   -  person Grizzly    schedule 18.11.2016
comment
@BviLLe_Kid Конечно, я искал похожие случаи - не нашел ничего, кроме стандартного первого подхода к коду и пустого проекта MVC, в то время как я использую проект MVC с предварительно созданными моделями доступа пользователей.   -  person nickornotto    schedule 18.11.2016


Ответы (1)


Как только вы действительно запустите сайт, и наткнетесь на что-то, что требует доступа к базе данных. Entity Framework должен создать базу данных. Я думаю, вы, возможно, просто слишком рано отклонились от пути.

Несмотря на это, да, по умолчанию сначала будет код или, что более уместно: по умолчанию будет создаваться новая база данных. Старые подходы «сначала модель» и «сначала база данных» устарели, и хотя вы все еще можете использовать их сейчас, это не рекомендуется, особенно при создании нового приложения, которое вам нужно будет поддерживать долго. срок. Тем не менее, «сначала код», несмотря на название, на самом деле может использоваться с существующей базой данных или для создания новой. Вам просто нужно немного изменить контекст, чтобы использовать существующую базу данных:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext() : base("ConnectionStringName")
    {
        Database.SetInitializer<ApplicationDbContext>(null);
    }

    ...
}

Затем отредактируйте файл Web.config и добавьте строку подключения к существующей базе данных, к которой вы хотите подключиться. Убедитесь, что имя, которое вы ему там даете, совпадает с «ConnectionStringName» в приведенном выше коде.

person Chris Pratt    schedule 18.11.2016
comment
Привет, спасибо, но это не объясняет, что происходит. Я установил приложение MVC по умолчанию, которое уже имеет public class ApplicationDbContext : IdentityDbContext<ApplicationUser> в классе IndentityModels, и оно настроено на соединение из web.config. В Сети. config я изменил соединение, чтобы оно указывало на мою новую базу данных. Но это все еще перепутано, и ни мой проект базы данных, ни мой веб-проект не видят новую базу данных. См. мою правку выше - person nickornotto; 18.11.2016