Entity Framework 7 DbContext scaffold

Я пытаюсь создать DbContext для существующей структуры базы данных с использованием ASP.NET 5 и Entity Framework 7. Не удивительно, что документации, как это сделать, не так много. Кроме того, я хочу, чтобы эшафот был ТОЛЬКО контекстом; есть ~ 900 таблиц, и я забочусь только о некоторых из них, мне не нужен класс модели для каждого из них.

Я использовал команды, указанные здесь и here с небольшой удачей.

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

  • Где находятся созданные файлы контекста? Я запускаю команду в командной строке без сбоев, но ничего больше не происходит. Я знаю, что я по крайней мере в нужном месте, поскольку я могу добавить старую модель EF6 с неподдерживаемыми свойствами, и это дает мне ошибку, что они не поддерживаются.

  • Возможно ли создать только контекст без соответствующих классов моделей?

Ответ 1

У меня была такая же проблема с моим проектом, создающим контекст и модели. Вот несколько вещей, которые я сделал.

Обновления для 1.0 RC1 ниже

Project.json

  "dependencies": {
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final"
  },

  "commands": {
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  }

Команда DNX

dnx ef dbcontext scaffold "connectionString" EntityFramework.MicrosoftSqlServer

Оригинальное сообщение ниже

Убедитесь, что они добавлены в файл project.json:

"dependencies": {
    "EntityFramework.SqlServer": "7.0.0-beta7",
    "EntityFramework.Commands": "7.0.0-beta7",
    "EntityFramework.SqlServer.Design": "7.0.0-beta7"
},
"commands": {
    "ef": "EntityFramework.Commands"
}

Обновите dnvm и время выполнения dnx, используя обновление dnvm update-self и dnvm. Я запустил это в cmd.

Открыл cmd.exe в местоположении проекта (если вы находитесь в окнах, перейдите в папку и сдвиньте + щелкните правой кнопкой мыши в папке и нажмите "Открыть здесь окно команд" ). В моем случае у меня был отдельный проект для моего уровня доступа к данным например.

C:\Projects\Stackoverflow Example\src\StackoverflowExample.DAL\

Затем я запустил simplay:

dnx ef dbcontext scaffold "Источник данных =; Начальный Catalog = database; Integrated Security = True" EntityFramework.SqlServer

Убедитесь, что ваш проект может быть создан. Если есть ошибки, команды, вероятно, не сработают.

Он генерировал все модели, а также контекст (с установкой OnModelCreating() для каждого объекта). Если вам не нужны все модели, просто удалите те, которые вы не используете.

Итак, чтобы ответить на ваши вопросы:

  • Он создает модели и контекст в папке, в которой вы запустили dncontext dncontext.
  • Я не вижу никаких команд, которые позволят вам это сделать. Запустите dnx ef --help в cmd и посмотрите сами. dnx ef

Надеюсь, это поможет.

Ответ 2

Для команды scaffold существует опция -table (-t):

dnx ef dbcontext scaffold connectionstring provider -t dbo.tab1 -t dbo.tab2

Ответ 3

Для EF 7 вам больше не нужно инициализировать базу, это приводит к ошибке компилятора. что вам нужно посмотреть как Microsoft EF7, начиная с.

Вы хотите обратить внимание на новый

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");

        // Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");

        // Visual Studio 2012 | Use the SQL Express instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");
    }

Ответ 4

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

public class MyDbContext : DbContext {

        public MyDbContext()
            : base("connectionString") {
            Database.SetInitializer<MyDbContext>(null);
        }

        public virtual DbSet<Table1> Table1s { get; set; }

        public virtual DbSet<Table2> Table2s { get; set; }

        ...
}

Вы можете включить DbSets только для тех таблиц, которые вам нужны. Вы создаете соответствующие модели, которые вам нужны (Таблица 1, Таблица 2 и т.д.), А также контроллеры лесов и виды из этих моделей.