[英]EF core 3.1+Pomelo Scaffold-DbContext prevent view code generation
我最近從 EF 核心 3.0 升級到 3.1.1,以及 Pomelo 適配器和工具。 但是,在更新之后, Scaffold-DbContext
命令現在也會為所有視圖生成代碼。
Scaffold-DbContext -Connection name=SystemDatabase -Provider Pomelo.EntityFrameworkCore.MySql -Force -Context MyDbContext -Project Test.Data
我希望生成的 DbContext 與更新前一樣 - 沒有視圖(直到經過全面測試)。
如何禁用這個新的視圖生成功能?
目前,此功能未在 EF Core 中實現。 但是,它正在GitHub 上進行跟蹤。
完成您想要的唯一官方方法是對您想要搭建的每個表使用-t
命令行參數(或-Tables
,取決於工具)(從而忽略所有視圖):
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
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
您還可以從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()
{
}
}
}
我們剛剛在 GitHub 存儲庫中為此功能添加了一個問題和一個PR 。
它將成為3.2.0
版本的一部分,也可以在大約 24 小時內從我們的夜間構建提要中獲得。
它引入了 Pomelo 和腳手架特定的連接字符串選項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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.