В настоящее время эта функция не реализована в EF Core. Однако отслеживается на GitHub .
1 Общее решение
Единственный официальный способ выполнить sh то, что вы хотите, - использовать -t
аргумент командной строки (или -Tables
, в зависимости от инструмента) для каждой отдельной таблицы, которую вы хотите, чтобы формировал (и тем самым игнорировал все представления):
1.1 do tnet ef scaffold
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb; Database=Blogging; Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext --context-namespace New.Namespace
1.2 Scaffold-DbContext
Scaffold-DbContext "Server=(localdb)\mssqllocaldb; Database=Blogging; Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace
2 Указанный поставщиком c решение
Вы также можете получить ваш собственный каркас из MySqlDatabaseModelFactory
и автоматически предоставит все таблицы базы данных, поэтому вам не нужно указывать их одну за другой:
using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Scaffolding;
using Microsoft.EntityFrameworkCore.Scaffolding.Metadata;
using Microsoft.Extensions.DependencyInjection;
using MySql.Data.MySqlClient;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;
using Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal;
#pragma warning disable EF1001
namespace IssueConsoleTemplate
{
public class CustomMySqlDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
=> serviceCollection
.AddSingleton<IDatabaseModelFactory, CustomMySqlDatabaseModelFactory>();
}
public class CustomMySqlDatabaseModelFactory : MySqlDatabaseModelFactory
{
public CustomMySqlDatabaseModelFactory(
IDiagnosticsLogger<DbLoggerCategory.Scaffolding> logger,
IMySqlOptions options)
: base(logger, options)
{
}
public override DatabaseModel Create(
string connectionString,
DatabaseModelFactoryOptions options)
{
//Debugger.Launch();
var tables = new HashSet<string>();
using (var connection = new MySqlConnection(connectionString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = @"SELECT `TABLE_NAME`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `TABLE_SCHEMA` = SCHEMA() AND `TABLE_TYPE` = 'BASE TABLE';";
using (var dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
tables.Add(dataReader.GetString("TABLE_NAME"));
}
}
}
}
return base.Create(
connectionString,
new DatabaseModelFactoryOptions(tables));
}
}
internal static class Program
{
private static void Main()
{
}
}
}
3 Решение Pomelo 3.2.0+ с использованием параметр строки подключения
Мы только что добавили issue и PR в наш репозиторий GitHub для этой функции.
Это будет частью 3.2.0
, а также будет доступен из нашего ночного канала сборки примерно через 24 часа.
Он представляет спецификация Pomelo и scaffolding c параметр строки подключения Scaffold:Views=off
, который может быть установлен как часть командной строки:
dotnet ef dbcontext scaffold "server=127.0.0.1; uid=root; pwd=; database=So62830251; Scaffold:Views=off" Pomelo.EntityFrameworkCore.MySql -c Context