-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy patharticle-41572.htm
205 lines (193 loc) · 20.9 KB
/
article-41572.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html>
<html xml:lang="zh-CN" lang="zh-CN">
<head>
<link rel="canonical" href="https://windowsv2ray.github.io/news/article-41572.htm" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>EFCore 的 DbFirst 模式</title>
<meta name="description" content="1 前言 EF6 时代,可以通过界面操作,添加数据库实体。 EF Core 需要通过 CLI 来进行该操作,具体请参考EF Core官方文档:反向工程。 当然,EF Core 也有界面化操作的工具,E" />
<link rel="icon" href="/assets/website/img/windowsv2ray/favicon.ico" type="image/x-icon"/>
<meta name="author" content="Windows V2ray分享订阅站">
<meta property="og:type" content="article" />
<meta property="og:url" content="https://windowsv2ray.github.io/news/article-41572.htm" />
<meta property="og:site_name" content="Windows V2ray分享订阅站" />
<meta property="og:title" content="EFCore 的 DbFirst 模式" />
<meta property="og:image" content="https://windowsv2ray.github.io/uploads/20240604/f3aa9f1b6dcf9083beb54c496aa84ff7.webp" />
<meta property="og:release_date" content="2025-01-16T09:12:51" />
<meta property="og:updated_time" content="2025-01-16T09:12:51" />
<meta property="og:description" content="1 前言 EF6 时代,可以通过界面操作,添加数据库实体。 EF Core 需要通过 CLI 来进行该操作,具体请参考EF Core官方文档:反向工程。 当然,EF Core 也有界面化操作的工具,E" />
<meta name="applicable-device" content="pc,mobile" />
<meta name="renderer" content="webkit" />
<meta name="force-rendering" content="webkit" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta name="robots" content="max-image-preview:large" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="EFCore 的 DbFirst 模式">
<meta name="format-detection" content="telephone=no">
<link rel="dns-prefetch" href="https:/www.googletagmanager.com">
<link rel="dns-prefetch" href="https://www.googleadservices.com">
<link rel="dns-prefetch" href="https://www.google-analytics.com">
<link rel="dns-prefetch" href="https://pagead2.googlesyndication.com">
<link rel="dns-prefetch" href="https://cm.g.doubleclick.net">
<link rel="stylesheet" href="/assets/website/js/frontend/windowsv2ray/animate/animate.css">
<link rel="stylesheet" href="/assets/website/css/windowsv2ray/bootstrap.css">
<link rel="stylesheet" href="/assets/website/css/windowsv2ray/maicons.css">
<link rel="stylesheet" href="/assets/website/js/frontend/windowsv2ray/owl-carousel/css/owl.carousel.css">
<link rel="stylesheet" href="/assets/website/css/windowsv2ray/theme.css">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-JN82W0GJX5"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-JN82W0GJX5');
</script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3332997411212854"
crossorigin="anonymous"></script>
</head>
<body data-page="detail">
<!-- Back to top button -->
<div class="back-to-top"></div>
<header>
<nav class="navbar navbar-expand-lg navbar-light navbar-float">
<div class="container">
<a href="/" class="navbar-brand">
<span>Windows V2ray</span>
</a>
<button class="navbar-toggler" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse" id="navbarContent">
<ul class="navbar-nav ml-lg-4 pt-3 pt-lg-0">
<li class="nav-item">
<a href="/" class="nav-link">首页</a>
</li>
<li class="nav-item">
<a href="/free-nodes/" class="nav-link">免费节点</a>
</li>
<li class="nav-item">
<a href="/paid-subscribe/" class="nav-link">推荐机场</a>
</li>
<li class="nav-item">
<a href="/client.htm" class="nav-link">客户端</a>
</li>
<li class="nav-item">
<a href="/news/" class="nav-link">新闻资讯</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-5">
<div class="page-banner">
<div class="row justify-content-center align-items-center h-100">
<div class="col-md-10">
<h1 class="text-center">EFCore 的 DbFirst 模式</h1>
<nav aria-label="Breadcrumb">
<ul class="breadcrumb justify-content-center py-0 bg-transparent">
<li class="breadcrumb-item"><a href="/">首页</a></li>
<li class="breadcrumb-item"><a href="/news/">新闻资讯</a></li>
<li class="breadcrumb-item active">正文</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</header>
<main>
<div class="page-section">
<div class="container">
<div class="row">
<div class="col-md-9">
<input type="hidden" id="share-website-info" data-name="" data-url="">
<h2 id="1-前言">1 前言</h2> <p>EF6 时代,可以通过界面操作,添加数据库实体。</p> <p>EF Core 需要通过 CLI 来进行该操作,具体请参考<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli" target="_blank" rel="nofollow">EF Core官方文档:反向工程</a>。</p> <p>当然,EF Core 也有界面化操作的工具,EF Core Power Tools,具体请见最后介绍。</p> <p></p> <h2 id="2-前置条件">2 前置条件</h2> <ul> <li> <p><a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://docs.microsoft.com/zh-cn/ef/core/cli/powershell" target="_blank" rel="nofollow">PMC 工具</a>(仅限 Visual Studio)或<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://docs.microsoft.com/zh-cn/ef/core/cli/dotnet" target="_blank" rel="nofollow">CLI 工具</a>。</p> </li> <li> <p>核心 NuGet 包:Microsoft.EntityFrameworkCore.Design</p> </li> <li> <p>还需要为要进行反向工程的数据库架构安装适当的<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://docs.microsoft.com/zh-cn/ef/core/providers/" target="_blank" rel="nofollow">数据库提供程序</a></p> </li> </ul> <p></p> <h2 id="3-主命令">3 主命令</h2> <pre><code class="language-bash">dotnet ef dbcontext scaffold "[数据库连接串]" [提供程序]</code></pre> <p>如:</p> <pre><code class="language-bash">dotnet ef dbcontext scaffold "server=localhost;database=efcore;uid=sa;pwd=Qwe123456;" Microsoft.EntityFrameworkCore.SqlServer</code></pre> <p></p> <h2 id="4-命令参数">4 命令参数</h2> <h4 id="41-生成指定表--table">4.1 生成指定表(--table)</h4> <p>上述命令,会生成整个数据库的表,如果需要指定特定的表,需要使用如下:</p> <pre><code class="language-bash">dotnet ef dbcontext scaffold "[数据库连接串]" [提供程序] --table table_name1 --table table_name2</code></pre> <h4 id="42-保留数据库名称--use-database-names">4.2 保留数据库名称(--use-database-names)</h4> <p>默认情况会修正表/列名,使用该参数尽量保留原名称。</p> <pre><code class="language-bash">-UseDatabaseNames #PMC --use-database-names #.NET Core CLI</code></pre> <h4 id="43-fluent-api-和数据注释--data-annotations">4.3 Fluent API 和数据注释(--data-annotations)</h4> <p>默认情况下,使用 Fluent API 配置实体类型。使用下面的命令,可以改为使用数据注释。</p> <pre><code class="language-bash">-DataAnnotations #PMC --data-annotations #.NET Core CLI</code></pre> <p>Fluent API</p> <pre><code class="language-csharp">entity.Property(e => e.Title) .IsRequired() .HasMaxLength(160);</code></pre> <p>数据注释</p> <pre><code class="language-csharp">[Required] [StringLength(160)] public string Title { get; set; }</code></pre> <h4 id="44-指定-dbcontext-名称--context">4.4 指定 DbContext 名称(--context)</h4> <p>指定将生成的 DbContext 类的名称</p> <pre><code class="language-bash">-Context #PMC --context #.NET Core CLI</code></pre> <h4 id="45-指定保存目录--context-dir-和---output-dir">4.5 指定保存目录(--context-dir 和 --output-dir)</h4> <pre><code class="language-bash">-ContextDir Data -OutputDir Models #PMC --context-dir Data --output-dir Models #.NET Core CLI</code></pre> <h4 id="46-指定命名空间--namespace-和---context-namespace">4.6 指定命名空间(--namespace 和 --context-namespace)</h4> <pre><code class="language-bash">-Namespace Your.Namespace -ContextNamespace Your.DbContext.Namespace #PMC --namespace Your.Namespace --context-namespace Your.DbContext.Namespace #.NET Core CLI</code></pre> <p></p> <h2 id="5-测试">5 测试</h2> <h3 id="51-数据库准备">5.1 数据库准备</h3> <p>由于是 DbFirst,所以这里我们先创建一个数据库,名为 efcore</p> <p>新建一张表 Test</p> <pre><code class="language-sql">CREATE TABLE [dbo].[Test]( [Id] [uniqueidentifier] NOT NULL, [Name] [nvarchar](128) NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]</code></pre> <h3 id="52-新建一个控制台程序">5.2 新建一个控制台程序</h3> <p>这里命名为:DbFirstTest</p> <pre><code class="language-bash">mkdir DbFirstTest & cd DbFirstTest #新建文件夹DbFirstTest并切换至该目录下 dotnet new console -f net6.0 #新建.NET6.0控制台程序</code></pre> <h3 id="53-引入-nuget-包">5.3 引入 Nuget 包</h3> <pre><code class="language-bash"># 引入 EF Core 核心包 dotnet add package Microsoft.EntityFrameworkCore.Design -v 6.0.4 # 引入 SQL Server 提供程序 dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.4</code></pre> <h3 id="54-执行-scaffold-命令">5.4 执行 Scaffold 命令</h3> <p>在控制台程序的根目录下,执行命令(连接串请自行修改成自己的):</p> <pre><code class="language-bash">dotnet ef dbcontext scaffold "server=localhost;database=efcore;uid=sa;pwd=Qwe123456;" Microsoft.EntityFrameworkCore.SqlServer --data-annotations --context EfCoreContext --context-dir Data --output-dir Models</code></pre> <p>--data-annotations:数据注释在实体上</p> <p>--context EfCoreContext:上下文指定命名为 EfCoreContext</p> <p>--context-dir Data:上下文保存在根目录的 Data 文件夹下</p> <p>--output-dir Models:实体保存在根目录的 Models 文件夹下</p> <h3 id="55-测试源码">5.5 测试源码</h3> <p>在 Program.cs 添加测试代码:</p> <pre><code class="language-csharp">using DbFirstTest.Data; using DbFirstTest.Models; EfCoreContext db = new EfCoreContext(); Test test = new Test() { Id = Guid.NewGuid(), Name = "Add" }; db.Tests.Add(test); db.SaveChanges(); Console.WriteLine("Add Successful!");</code></pre> <p>在项目根目录下,执行:</p> <pre><code class="language-bash">dotnet build #编译 dotnet run #运行</code></pre> <p>执行以后,可以看到,数据库中添加了相应的记录。</p> <h3 id="56-源码">5.6 源码</h3> <p>Gitee:<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://gitee.com/lisheng741/testnetcore/tree/master/EFCore/DbFirstTest" target="_blank" rel="nofollow">https://gitee.com/lisheng741/testnetcore/tree/master/EFCore/DbFirstTest</a></p> <p>Github:<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://github.com/lisheng741/testnetcore/tree/master/EFCore/DbFirstTest" target="_blank" rel="nofollow">https://github.com/lisheng741/testnetcore/tree/master/EFCore/DbFirstTest</a></p> <p></p> <h2 id="6-ef-core-power-tools">6 EF Core Power Tools</h2> <p>开源的 EF Core 界面工具,可以作为一个 vs 的插件,在 vs 里运作。</p> <p>项目 Github 地址:<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://github.com/ErikEJ/EFCorePowerTools/" target="_blank" rel="nofollow">https://github.com/ErikEJ/EFCorePowerTools/</a></p> <p>VS 插件下载:<a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://marketplace.visualstudio.com/items?itemName=ErikEJ.EFCorePowerTools" target="_blank" rel="nofollow">https://marketplace.visualstudio.com/items?itemName=ErikEJ.EFCorePowerTools</a></p> <p>在 VS 插件市场下载以后,安装即可。</p> <p>本人的 vs 版本是 vs2022,安装以后,右键项目多了一个选项【EF Core工具】,点击【反向工程】即可进行 DbFirst 的相关操作了。</p> <p>界面化操作比较直观,这里不在赘述。</p> <p><img decoding="async" src="http://img.555519.xyz/uploads3/20220509/772b3d39e98935996529d89282839081.jpg" alt="EFCore 的 DbFirst 模式"></p> <p></p> <h2 id="参考来源">参考来源</h2> <p><a href="http://www.m6000.cn/wp-content/themes/begin%20lts/inc/go.php?url=https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli" target="_blank" rel="nofollow">EF Core官方文档:反向工程</a></p> <div class="clearfix"></div>
<div class="col-md-12 mt-5">
<p>上一个:<a href="/news/article-41070.htm">机器学习笔记:Python底层实现KNN</a></p>
<p>下一个:<a href="/news/article-41574.htm">动物疫苗打到人身上有事吗有影响吗知乎视频(动物注射疫苗)</a></p>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">热门文章</h3>
</div>
<div class="panel-body">
<ul class="p-0 x-0" style="list-style: none;margin: 0;padding: 0;">
<li class="py-2"><a href="/free-nodes/2025-2-11-shadowrocket-node.htm" title="「2月11日」最高速度20.6M/S,2025年V2ray/Clash/Shadowrocket/SSR每天更新免费节点订阅链接">「2月11日」最高速度20.6M/S,2025年V2ray/Clash/Shadowrocket/SSR每天更新免费节点订阅链接</a></li>
<li class="py-2"><a href="/news/article-41574.htm" title="动物疫苗打到人身上有事吗有影响吗知乎视频(动物注射疫苗)">动物疫苗打到人身上有事吗有影响吗知乎视频(动物注射疫苗)</a></li>
<li class="py-2"><a href="/free-nodes/2025-1-12-free-ssr-node.htm" title="「1月12日」最高速度19.3M/S,2025年SSR/Shadowrocket/Clash/V2ray每天更新免费节点订阅链接">「1月12日」最高速度19.3M/S,2025年SSR/Shadowrocket/Clash/V2ray每天更新免费节点订阅链接</a></li>
<li class="py-2"><a href="/news/article-48391.htm" title="网络协议之:socket协议详解之Unix domain Socket">网络协议之:socket协议详解之Unix domain Socket</a></li>
<li class="py-2"><a href="/news/article-35470.htm" title="动物疫苗价格一览表图片高清大图下载(动物疫苗价格一览表图片高清大图下载)">动物疫苗价格一览表图片高清大图下载(动物疫苗价格一览表图片高清大图下载)</a></li>
<li class="py-2"><a href="/news/article-50035.htm" title="Docker基础数据卷容器的说明与共享数据原理详解">Docker基础数据卷容器的说明与共享数据原理详解</a></li>
<li class="py-2"><a href="/news/article-37138.htm" title="动物疫苗官网查询网站下载(动物疫苗查询系统)">动物疫苗官网查询网站下载(动物疫苗查询系统)</a></li>
<li class="py-2"><a href="/free-nodes/2025-2-6-free-node-subscribe-links.htm" title="「2月6日」最高速度18.9M/S,2025年Clash/SSR/Shadowrocket/V2ray每天更新免费节点订阅链接">「2月6日」最高速度18.9M/S,2025年Clash/SSR/Shadowrocket/V2ray每天更新免费节点订阅链接</a></li>
<li class="py-2"><a href="/news/article-43066.htm" title="猫咪打的三针疫苗多少钱(猫猫打三针多少钱)">猫咪打的三针疫苗多少钱(猫猫打三针多少钱)</a></li>
<li class="py-2"><a href="/free-nodes/2025-2-12-free-node-subscribe.htm" title="「2月12日」最高速度20.8M/S,2025年SSR/V2ray/Shadowrocket/Clash每天更新免费节点订阅链接">「2月12日」最高速度20.8M/S,2025年SSR/V2ray/Shadowrocket/Clash每天更新免费节点订阅链接</a></li>
</ul>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">归纳</h3>
</div>
<div class="panel-body">
<ul class="p-0 x-0" style="list-style: none;margin: 0;padding: 0;">
<li class="py-2">
<h4><span class="badge" style="float: right;">12</span> <a href="/date/2025-03/" title="2025-03 归档">2025-03</a></h4>
</li>
<li class="py-2">
<h4><span class="badge" style="float: right;">84</span> <a href="/date/2025-02/" title="2025-02 归档">2025-02</a></h4>
</li>
<li class="py-2">
<h4><span class="badge" style="float: right;">83</span> <a href="/date/2025-01/" title="2025-01 归档">2025-01</a></h4>
</li>
</ul>
</div>
</div>
</div>
</div>
</div> <!-- .container -->
</div> <!-- .page-section -->
</main>
<footer class="page-footer">
<div class="container">
<div class="row">
<div class="col-sm-6 py-2">
<p id="copyright">
<p>
<a href="/">首页</a> |
<a href="/free-node/">免费节点</a> |
<a href="/news/">新闻资讯</a> |
<a href="/about-us.htm">关于我们</a> |
<a href="/disclaimer.htm">免责申明</a> |
<a href="/privacy.htm">隐私申明</a> |
<a href="/sitemap.xml">网站地图</a>
</p>
Windows V2ray分享订阅站 版权所有 Powered by WordPress
</p>
</div>
<div class="col-sm-6 py-2 text-right">
<div class="d-inline-block px-3">
<a href="#">Privacy</a>
</div>
<div class="d-inline-block px-3">
<a href="#">Contact Us</a>
</div>
</div>
</div>
</div> <!-- .container -->
</footer> <!-- .page-footer -->
<script src="/assets/website/js/frontend/windowsv2ray/jquery-3.5.1.min.js"></script>
<script src="/assets/website/js/frontend/windowsv2ray/bootstrap.bundle.min.js"></script>
<script src="/assets/website/js/frontend/windowsv2ray/wow/wow.min.js"></script>
<script src="/assets/website/js/frontend/windowsv2ray/owl-carousel/js/owl.carousel.min.js"></script>
<script src="/assets/website/js/frontend/windowsv2ray/waypoints/jquery.waypoints.min.js"></script>
<script src="/assets/website/js/frontend/windowsv2ray/animateNumber/jquery.animateNumber.min.js"></script>
<script src="/assets/website/js/frontend/windowsv2ray/theme.js"></script>
<script src="https://www.freeclashnode.com/assets/js/frontend/invite-url.js"></script>
<script src="/assets/website/js/frontend/G.js"></script>
</body>
</html>