首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架核心:自动将DB搭建到类库中

问实体框架核心:自动将DB搭建到类库中
EN

Stack Overflow用户
提问于 2018-01-23 15:17:34
回答 4查看 5.4K关注 0票数 3

在本教程之后,可以通过命令行使用Entity构建数据库上下文。

脚手架有一些奇怪的要求

  • 它需要一个入口点,也就是main方法(没有到类库中的脚手架)。
  • 整个项目必须是可编译的(在脚手架之前)

在我的当前项目中,我需要“共享项目”中的模型类(而不是直接的类库)。共享项目没有入口点。

(由于DB engineer在数据库第一方法中经常更新数据库模型,所以我目前做了大量的支架工作)。

为了创建一些自动的脚手架任务脚本,我计划自动执行以下任务:

  • 创建一个新的空的临时点网命令行应用程序(它是可构建的,并且有一个入口点)
  • 添加所需的包
  • 构建数据库上下文和模型类
  • 将生成的类移动到库/共享项目
  • 删除临时项目

到目前为止,我成功地实现了第一点的自动化。

但我想不出如何将ItemGroup DotNetCliToolReference添加到.csproj文件的xml中。

是否有任何dotnet命令允许我添加DotNetCliToolReference,而不仅仅是包和项目到项目的引用?

能给我其他提示吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-18 21:30:33

在EFCore2.1中,引用包含在.NET Core中,这意味着您不必将引用添加到临时项目中。

https://blogs.msdn.microsoft.com/dotnet/2018/05/30/announcing-entity-framework-core-2-1/

dotnet命令现在作为.NET核心SDK的一部分发布,因此不再需要在项目中使用DotNetCliToolReference来使用迁移或从现有数据库构建DbContext。

我已经创建了一个快速的PowerShell脚本,该脚本被添加到classlib中,然后创建一个临时项目并搭建dbcontext,并在最后清理所有内容。

代码语言:javascript
复制
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!";

我相信这个脚本可以被改进,但是它工作得很好。

脚本的工作方式如下:

假设我们在classlib目录中运行脚本: c:/test/classlib

  1. 存储当前目录
  2. 创建临时web项目: c:/test/temp
  3. DBContext支架
  4. 将脚手架项目移动到classlib (请注意,脚本设置为覆盖当前实体dir)
  5. 删除临时项目

您仍然需要将名称空间更改为正确的名称空间。据我所知,对脚手架上命名空间的支持目前在2.2的列表中。希望能帮上忙!

票数 6
EN

Stack Overflow用户

发布于 2019-11-08 09:02:34

  1. 从Nuget安装EntityFrameWorkCore.Sqlserver和EntityFrameWorkCore.Tools
  2. 在控制台中写: 支架-DbContext "Data Source=.;Initial Catalog=“dbName;集成Security=True”Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Project“项目的类库名称
票数 7
EN

Stack Overflow用户

发布于 2018-01-23 17:50:10

你有没有试过我的"EF核心动力工具“--它们也许能帮助你自动化这个过程?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48405079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档