mon*_*nty 2 scaffolding scaffold entity-framework-core dotnet-cli
按照本教程,可以通过命令行使用 Entity Framework Core 构建数据库上下文。
脚手架有一些奇怪的要求
在我当前的项目中,我需要“共享项目”(而不是直接类库)中的模型类。共享项目没有入口点。
(我目前有很多脚手架,因为数据库工程师在数据库优先的方法中更新了很多数据库模型)。
为了创建一些自动化脚手架任务脚本,我计划自动化以下任务:
到目前为止,我设法自动化了第一点。
但我不知道如何将 ItemGroup DotNetCliToolReference 添加到 .csproj 文件的 xml 中。
是否有任何 dotnet cli 命令可以让我添加 DotNetCliToolReference 而不仅仅是包和项目到项目的引用?
请给我任何其他提示?
从 EF Core 2.1 开始,该引用包含在 .NET Core SDK 中,这意味着您不必将引用添加到临时项目。
https://blogs.msdn.microsoft.com/dotnet/2018/05/30/annoucing-entity-framework-core-2-1/
dotnet-ef 命令现在作为 .NET Core SDK 的一部分提供,因此不再需要在项目中使用 DotNetCliToolReference 才能使用迁移或从现有数据库构建 DbContext。
我创建了一个快速的 PowerShell 脚本,该脚本添加到 classlib 中,然后创建一个临时项目并搭建 dbcontext 并在最后清理所有内容。
param(
[Parameter(Mandatory=$true)][string]$username,
[Parameter(Mandatory=$true)][string]$password,
[Parameter(Mandatory=$true)][string]$datasource,
[Parameter(Mandatory=$true)][string]$catalog,
[Parameter(Mandatory=$true)][string]$contextName
)
$workingDir = $PSScriptRoot;
Write-Host "Project dir= $workingDir";
Write-Host "Creating temp project to run scaffold on";
cd ..
mkdir temp
cd temp
dotnet new web
Write-Host "Done creating temp project";
Write-Host "Scaffolding dbcontext into project";
dotnet ef dbcontext scaffold "data source=$($datasource);initial catalog=$($catalog);user id=$($username);password=$($password);MultipleActiveResultSets=True;App=EntityFramework" Microsoft.EntityFrameworkCore.SqlServer --output-dir Entities --context $contextName --project temp.csproj
Write-Host "Done scaffolding dbcontext into temp project";
New-Item -ErrorAction Ignore -ItemType directory -Path "$workingDir/Entities";
Move-Item ./Entities/* "$workingDir/Entities" -force;
Write-Host "Scaffold completed! Starting clean-up";
cd ..
Remove-Item ./temp -force -Recurse;
cd $workingDir;
Write-Host "Clean-up completed!";
Run Code Online (Sandbox Code Playgroud)
我确信脚本可以改进,但它的效果很好。
该脚本的工作原理如下:
假设我们在 classlib 目录中运行脚本:c:/test/classlib
您仍然需要将命名空间更改为正确的命名空间。据我所知,对脚手架上的命名空间的支持目前在 2.2 的列表中。希望能帮助到你!
小智 5
安装EntityFrameWorkCore.Sqlserver并EntityFrameWorkCore.Tools从 Nuget
在包管理器控制台中写入:
Scaffold-DbContext "Data Source=.;Initial Catalog="dbName";Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Project "Project's class library Name"
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |