12

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

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

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

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

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

+0

Когда вы говорите, что были «немного удачи» с этими командами, в чем была проблема именно? – DavidG

+0

@DavidG, когда я запускаю команду в приглашении, я просто не получаю результата. Никакой ошибки, но также и успеха. Мой контекстный файл остается пустым, и я не вижу другого, добавленного в файловую систему. – awh112

ответ

-3

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

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 только для тех таблиц, которые необходимо. Вы создаете соответствующие модели, которые вам нужны (Table1, Table2 и т. Д.) И контроллеры лесов и виды из этих моделей.

+0

Удачи вам, если вам нужно смоделировать 100 столов! – DavidG

+0

Спасибо за предложение! Проблема заключается в том, что база данных, на которую вы ссылаетесь выше, является System.Data, в то время как я использую Microsoft.Data и объект DatabaseFacade, открытый из базового контекста, не имеет метода SetInitializer. – awh112

+0

@DavidG К счастью, мне нужно всего лишь моделировать 5 таблиц из многих, которые есть! – awh112

0

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

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

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;"); 
    } 
12

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

Обновления для 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" 
} 

Upgrade DNVM и время автономной работы DnX, а также с использованием DNVM обновления-я и DNVM обновить. Я запустил это в cmd.

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

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

Я тогда simplay побежал:

DNX эф DbContext эшафот "Источник данных = .; Initial Catalog = база данных; Integrated Security = True" EntityFramework.SqlServer

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

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

Так, чтобы ответить вам вопросы:

  1. Это создает модель и контекст в папке, в которой управляли DNX эф DbContext лески в
  2. Я не могу видеть любые команды, которые позволят вам сделать это еще. , Пробег dnx ef --help в cmd и посмотрите сами. dnx ef

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

+0

те же шаги, за исключением того, что мне пришлось установить все пакеты из командной строки с помощью «dnu», спасибо! – LeLong37

+0

Ваш DAL-слой - это проект такого типа? большинство типов проектов не поддерживают project.json – pootzko

+1

@pootzko Я использовал библиотеку классов (пакет) в рамках 4.6. Ссылался на это в моем BL, который также является библиотекой классов, и ссылался на BL в моем веб-приложении ASP.NET 5. Сплит работал для меня из-за сложности моего проекта, но вы можете сделать все это в одном проекте веб-приложения. –

3

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

dnx ef dbcontext scaffold connectionstring provider -t dbo.tab1 -t dbo.tab2 
Смежные вопросы