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 и т.д.), А также контроллеры лесов и виды из этих моделей.