{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "FreeSql",
  "home_page_url": "https://freesql.net/",
  "feed_url": "https://freesql.net/feed.json",
  "description": "FreeSql 文档",
  "favicon": "https://freesql.net/favicon-32x32.png",
  "items": [
    {
      "title": "TDengine",
      "url": "https://freesql.net/guide/freesql-provider-tdengine.html",
      "id": "https://freesql.net/guide/freesql-provider-tdengine.html",
      "summary": "介绍 TDengine 是一款开源、高性能、云原生的时序数据库, 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计 TDengine 文档 | TDengine 文档 | 涛思数据 安装包 FreeSql.Provider.TDengine .NET CLI Package Manager 安装客户端驱动 如果选择原生连接，而且应用程序...",
      "content_html": "<h2>介绍</h2>\n<p>TDengine 是一款开源、高性能、云原生的时序数据库, 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计</p>\n<p><a href=\"https://docs.taosdata.com/\" target=\"_blank\" rel=\"noopener noreferrer\">TDengine 文档 | TDengine 文档 | 涛思数据</a></p>\n<h2>安装包</h2>\n<p>FreeSql.Provider.TDengine</p>\n<p>.NET CLI</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.TDengine</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>Package Manager</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Install-Package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.TDengine</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>安装客户端驱动</h2>\n<p>如果选择原生连接，而且应用程序不在 TDengine 同一台服务器上运行，你需要先安装客户端驱动，否则可以跳过此一步。为避免客户端驱动和服务端不兼容，请使用一致的版本。</p>\n<p><a href=\"https://docs.taosdata.com/connector/#%E5%AE%89%E8%A3%85%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%A9%B1%E5%8A%A8\" target=\"_blank\" rel=\"noopener noreferrer\">安装客户端驱动 taosc</a></p>\n<h2>声明</h2>\n<blockquote>\n<p>建议尽量使用无参数化</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TDengine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        \"host=localhost;port=6030;username=root;password=taosdata;protocol=Native;db=test;\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\r\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseNoneCommandParameter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//无参数化</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>特有功能</h2>\n<h3>超级表</h3>\n<p>采用“一个数据采集点一张表”的设计虽然有助于针对性地管理每个采集点，但随着设备数量不断增加表的数量也会急剧增加，这给数据库管理和数据分析带来了挑战。在进行跨数据采集点的聚合操作时，用户需要面对大量的表，工作变得异常繁重。</p>\n<p>为了解决这个问题，TDengine 引入超级表（Super Table，简称为 STable）的概念。超级表是一种数据结构，它能够将某一特定类型的数据采集点聚集在一起，形成一张逻辑上的统一表。这些数据采集点具有相同的表结构，但各自的静态属性（如标签）可能不同。创建超级表时，除了定义采集量以外，还需定义超级表的标签。一张超级表至少包含一个时间戳列、一个或多个采集量列以及一个或多个标签列。此外，超级表的标签可以灵活地进行增加、修改或删除操作。</p>\n<p>在 TDengine 中，表代表具体的数据采集点，而超级表则代表一组具有相同属性的数据采集点集合。以智能电表为例，我们可以为该类型的电表创建一张超级表，其中包含了所有智能电表的共有属性和采集量。这种设计不仅简化了表的管理，还便于进行跨数据采集点的聚合操作，从而提高数据处理的效率。</p>\n<h3>子表</h3>\n<p>子表是数据采集点在逻辑上的一种抽象表示，它是隶属于某张超级表的具体表。用户可以将超级表的定义作为模板，并通过指定子表的标签值来创建子表。这样，通过超级表生成的表便被称为子表。超级表与子表之间的关系主要体现在以下几个方面。</p>\n<ul>\n<li>一张超级表包含多张子表，这些子表具有相同的表结构，但标签值各异。</li>\n<li>子表的表结构不能直接修改，但可以修改超级表的列和标签，且修改对所有子表立即生效。</li>\n<li>超级表定义了一个模板，自身并不存储任何数据或标签信息。</li>\n</ul>\n<p>在 TDengine 中，查询操作既可以在子表上进行，也可以在超级表上进行。针对超级表的查询，TDengine 将所有子表中的数据视为一个整体，首先通过标签筛选出满足查询条件的表，然后在这些子表上分别查询时序数据，最终将各张子表的查询结果合并。本质上，TDengine 通过对超级表查询的支持，实现了多个同类数据采集点的高效聚合。为了更好地理解采集量、标签、超级表与子表之间的关系，这里以智能电表的数据模型为例进行说明。可以参考图 3-1 的数据模型，以便更直观地了解这些概念。</p>\n<p>为了更好地理解采集量、标签、超级与子表的关系，以智能电表为例，可以参考下图</p>\n<figure><img src=\"https://docs.taosdata.com/assets/images/data-model-b937dfef72001fd8842294bf8fb10cd0.png\" alt=\"数据模型示意图\" tabindex=\"0\" loading=\"lazy\"><figcaption>数据模型示意图</figcaption></figure>\n<h3>例子</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineSuperTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"meters\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">   class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Meters</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"ts\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"current\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> float</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"voltage\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Voltage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"describe\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">StringLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 50</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Describe</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"location\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Location</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"group_id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineSubTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">SuperTableName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"meters\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"d1001\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">   class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> D1001</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Meters</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"location\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Location</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"BeiJIng.ChaoYang\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"group_id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineSubTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">SuperTableName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"meters\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"d1002\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">   class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Meters</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"location\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> new</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Location</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"California.SanFrancisco\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">       [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TDengineTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"group_id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">       public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> new</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>CodeFirst创建表</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//尽量确定表结构</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//同步子表会自动创建超表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1001</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>插入数据</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//向子表插入数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> affrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Voltage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Describe</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"D10021\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//批量向子表插入数据，注意 一定要关闭参数化</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> batchRes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Voltage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Describe</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"D10026\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Voltage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Describe</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"D10023\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Voltage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Describe</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"D10024\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>查询</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//查询子表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">D1001</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//查询超表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> metersList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Meters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">d</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">d</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>删除</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> startTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2024-11-30T02:33:52.308+00:00\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> endTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2024-11-30T02:40:58.961+00:00\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//必须包含时间戳</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> executeAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Meters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">meters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">meters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> startTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> meters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> endTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> meters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "image": "https://docs.taosdata.com/assets/images/data-model-b937dfef72001fd8842294bf8fb10cd0.png",
      "date_published": "2024-11-30T03:50:04.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "DuckDB（嵌入式 OLAP）",
      "url": "https://freesql.net/guide/freesql-provider-duckdb.html",
      "id": "https://freesql.net/guide/freesql-provider-duckdb.html",
      "summary": "介绍 DuckDB 是一款进程内分析数据库，它可以在无需维护分布式多服务器系统的情况下处理出人意料的大型数据集。 DuckDB has two configurable options for concurrency: One process can both read and write to the database. Multiple proce...",
      "content_html": "<h2>介绍</h2>\n<p>DuckDB 是一款进程内分析数据库，它可以在无需维护分布式多服务器系统的情况下处理出人意料的大型数据集。</p>\n<p>DuckDB has two configurable options for concurrency:</p>\n<ul>\n<li>One process can both read and write to the database.</li>\n<li>Multiple processes can read from the database, but no processes can write (access_mode = 'READ_ONLY').</li>\n</ul>\n<p><a href=\"https://duckdb.org/docs/\" target=\"_blank\" rel=\"noopener noreferrer\">DuckDB | 官网 </a></p>\n<h2>安装包</h2>\n<p>FreeSql.Provider.Duckdb</p>\n<p>.NET CLI</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.Duckdb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>Package Manager</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Install-Package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.Duckdb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>声明</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DuckDB</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"DataSource = train_services.db\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//自动创建表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>依赖的第三方 ado.net 驱动源代码：https://github.com/Giorgi/DuckDB.NET</p>\n<p>| Connection String                                                      | Description                                                                        |\n|</p>\n",
      "date_published": "2024-08-17T09:27:08.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "ClickHouse",
      "url": "https://freesql.net/guide/freesql-provider-clickhouse.html",
      "id": "https://freesql.net/guide/freesql-provider-clickhouse.html",
      "summary": "介绍 ClickHouse 是一个高性能的开源列式数据库，专为实时大数据分析设计。它以列存储数据，支持快速查询和聚合操作，适合处理大规模数据集。ClickHouse 具备分布式架构、数据压缩和高可用性特性，使其在处理复杂查询和实时数据分析时表现出色。 ClickHouse | 官网 安装包 FreeSql.Provider.ClickHouse .NE...",
      "content_html": "<h2>介绍</h2>\n<p><code>ClickHouse</code> 是一个高性能的开源列式数据库，专为实时大数据分析设计。它以列存储数据，支持快速查询和聚合操作，适合处理大规模数据集。<code>ClickHouse</code> 具备分布式架构、数据压缩和高可用性特性，使其在处理复杂查询和实时数据分析时表现出色。</p>\n<p><a href=\"https://clickhouse.com/docs/en/\" target=\"_blank\" rel=\"noopener noreferrer\">ClickHouse | 官网 </a></p>\n<h2>安装包</h2>\n<p>FreeSql.Provider.ClickHouse</p>\n<p>.NET CLI</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.ClickHouse</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>Package Manager</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Install-Package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.ClickHouse</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>声明</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ClickHouse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        \"DataCompress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Encrypt=False;Compressor=lz4;\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        \"Host=192.168.0.121;Port=8125;Database=PersonnelLocation;Username=root;Password=123\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2024-07-26T09:14:45.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Firebird（嵌入式）",
      "url": "https://freesql.net/guide/freesql-provider-firebird.html",
      "id": "https://freesql.net/guide/freesql-provider-firebird.html",
      "summary": "介绍 Firebird 是一个开源的关系型数据库管理系统，它支持嵌入式部署。Firebird 嵌入式数据库适用于需要在本地应用程序中直接集成数据库的场景，无需单独的数据库服务器。它提供了强大的事务处理、数据完整性和并发控制功能，同时保持轻量级和高效。适合小型到中型应用程序，特别是那些需要在不依赖外部数据库服务器的情况下进行本地数据存储和操作的情况。 F...",
      "content_html": "<h2>介绍</h2>\n<p><code>Firebird</code> 是一个开源的关系型数据库管理系统，它支持嵌入式部署。<code>Firebird</code> 嵌入式数据库适用于需要在本地应用程序中直接集成数据库的场景，无需单独的数据库服务器。它提供了强大的事务处理、数据完整性和并发控制功能，同时保持轻量级和高效。适合小型到中型应用程序，特别是那些需要在不依赖外部数据库服务器的情况下进行本地数据存储和操作的情况。</p>\n<p><code>Firebird</code> 和 <code>Sqlite</code> 都是本地数据库，<code>Firebird</code> 支持并发读写，<code>Sqlite</code> 不支持并发写。</p>\n<p><a href=\"https://firebirdsql.org/en/documentation/\" target=\"_blank\" rel=\"noopener noreferrer\">Firebird | 官网 </a></p>\n<h2>安装包</h2>\n<p>FreeSql.Provider.Firebird</p>\n<p>.NET CLI</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.Firebird</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>Package Manager</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Install-Package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.Firebird</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>声明</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Firebird</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"database=localhost:D:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\f</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">bdata</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\E</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">XAMPLES.fdb;user=sysdba;password=123456\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//自动创建表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>嵌入式例子</h2>\n<p><a href=\"https://github.com/user-attachments/files/18879676/freesql_firebird_embed.zip\" target=\"_blank\" rel=\"noopener noreferrer\">freesql_firebird_embed.zip</a></p>\n",
      "date_published": "2024-07-26T09:14:45.000Z",
      "date_modified": "2025-02-20T02:00:43.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "SqlServer",
      "url": "https://freesql.net/guide/freesql-provider-sqlserver.html",
      "id": "https://freesql.net/guide/freesql-provider-sqlserver.html",
      "summary": "FreeSql 最多支持 SqlServer2000，根据不同的需求选择驱动包，微软提供了两个 SqlClient 访问包，因此我们也发布了两个，分别是： FreeSql.Provider.SqlServer FreeSql.Provider.SqlServerForSystem （强制使用 System.Data.SqlClient.dll，对 .N...",
      "content_html": "<p>FreeSql 最多支持 SqlServer2000，根据不同的需求选择驱动包，微软提供了两个 SqlClient 访问包，因此我们也发布了两个，分别是：</p>\n<ul>\n<li>FreeSql.Provider.SqlServer</li>\n<li>FreeSql.Provider.SqlServerForSystem （强制使用 System.Data.SqlClient.dll，对 .NET Framework 更友好）</li>\n</ul>\n<h2>WithLock/WithIndex</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Limit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT TOP 1 ... FROM [Region] a With(NoLock)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServerLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NoLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> |</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlServerLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NoWait</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Limit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT TOP 1 ... FROM [Region] a With(NoLock, NoWait)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"idx_01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Limit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT TOP 1 ... FROM [Region] a With(index=idx_01, NoLock)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>多表：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServerLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NoLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        [</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"idx_01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        [</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"idx_02\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Limit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT TOP 1 ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM [Region] a With(index=idx_01, NoLock)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INNER JOIN [T2] b With(index=idx_02) ON a.[x] = b.[xx]</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>全局设置 NoLock：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//所有实体类生效</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetGlobalSelectWithLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServerLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NoLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//【指定】实体类生效</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetGlobalSelectWithLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServerLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NoLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>增删改 SqlBulkCopy</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteSqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteSqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//临时表 + MERGE INTO</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">InsertOrUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteSqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//临时表 + MERGE INTO</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>访问 SqlServer2000</h2>\n<p>使用自定义适配更多的数据库，比如 mssql2000、db2，自定义适配将牺牲一些功能：</p>\n<ul>\n<li>不支持 CodeFirst 自动迁移</li>\n<li>不支持 DbFirst 接口方法的实现</li>\n<li>不支持 原来的分页方法，需要自行判断 id 进行分页</li>\n<li>只支持较少的基础类型：bool,sbyte,short,int,long,byte,ushort,uint,ulong,double,float,decimal,DateTime,byte[],string,Guid</li>\n</ul>\n<p>使用者只需求重写类 FreeSql.Custom.CustomAdapter 就可以自定义访问不同的数据库。</p>\n<p>默认做了一套 sqlserver 的语法和映射适配，代码在 <a href=\"https://github.com/2881099/FreeSql/blob/master/Providers/FreeSql.Provider.Custom/CustomAdapter.cs\" target=\"_blank\" rel=\"noopener noreferrer\">CustomAdapter.cs</a>，请查看代码了解。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Mssql2000Adapter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Custom</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CustomAdapter</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> InsertAfterGetIdentitySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"SELECT SCOPE_IDENTITY()\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //可以重写更多的设置</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DB</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">   static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Lazy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">sqliteLazy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Lazy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(() =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Custom</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OdbcConnection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Trace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetCustomAdapter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Mssql2000Adapter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">sqliteLazy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>适配好新的 CustomAdapter 后，请在 FreeSqlBuilder.Build 之后调用 IFreeSql.SetCustomAdapter 方法生效。</p>\n<p>使用 ODBC 访问古董数据库。</p>\n",
      "date_published": "2024-07-25T07:47:58.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "AdminBlazor",
      "url": "https://freesql.net/guide/AdminBlazor.html",
      "id": "https://freesql.net/guide/AdminBlazor.html",
      "summary": "AdminBlazor 项目介绍 AdminBlazor 是一款 Blazor Server SaaS 中台项目，支持 RABC 权限菜单/按钮，支持快速代码生成一对一、一对多、多对多导航属性的 .razor 界面。 集成功能：菜单、角色、用户、公司组织、定时任务、数据字典、参数配置、租户、审批、审计、OSS文件管理 依赖组件：BootstrapBla...",
      "content_html": "\n<h2>项目介绍</h2>\n<p>AdminBlazor 是一款 Blazor Server SaaS 中台项目，支持 RABC 权限菜单/按钮，支持快速代码生成一对一、一对多、多对多导航属性的 .razor 界面。</p>\n<p>集成功能：菜单、角色、用户、公司组织、定时任务、数据字典、参数配置、租户、审批、审计、OSS文件管理</p>\n<p>依赖组件：BootstrapBlazor、FreeSql、FreeScheduler、Rougamo</p>\n<ul>\n<li>老版本: https://gitee.com/FreeSql/AdminBlazor</li>\n<li>新版本：暂不开源（商业技术支持）</li>\n</ul>\n<figure><img src=\"/adminblazor/0008.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<figure><img src=\"/adminblazor/0001.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<h2>快速开始</h2>\n<ol>\n<li>安装模板</li>\n</ol>\n<blockquote>\n<p>dotnet new install AdminBlazor.Template</p>\n</blockquote>\n<ol start=\"2\">\n<li>新建项目</li>\n</ol>\n<blockquote>\n<p>dotnet new admin</p>\n</blockquote>\n<blockquote>\n<p>项目结构简洁（没有过多的分层）</p>\n</blockquote>\n<ol start=\"3\">\n<li>运行访问</li>\n</ol>\n<blockquote>\n<p>http://localhost:5231</p>\n</blockquote>\n<p>用户名：admin 密码：admin</p>\n<ol start=\"4\">\n<li>新建菜单，类型选择增删改查</li>\n</ol>\n<figure><img src=\"/adminblazor/0002.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<ol start=\"5\">\n<li>生成代码，在实体类型维护注释、导航属性</li>\n</ol>\n<ul>\n<li>实体上的注释，会生成 HTML Label</li>\n<li>实体上的导航属性，会生成丰富的 UI</li>\n<li>创建实体类型，建议继承 Entity/EntityCreated/EntityModifed/EntityAudited</li>\n</ul>\n<figure><img src=\"/adminblazor/0003.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<h2>权限</h2>\n<ul>\n<li>SysUser 多对多 SysRole</li>\n<li>SysRole 多对多 SysMenu</li>\n</ul>\n<p>提示：AdminContext 类型已注入为 Scoped</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AdminContext</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IServiceProvider</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Service</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SysUser</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SysRole</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Roles</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SysMenus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">RoleMenus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //路由、按钮权限验证</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> bool</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> AuthPath</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> path</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> bool</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> AuthButton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> path</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>按钮权限，在 razor 中设置特性：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AdminButton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ButtonClick</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//或者 webapi</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Route</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"api/菜单路径\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> XxxController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ControllerBase</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">HttpGet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"@name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> JsonResult</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ButtonClick</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>之后菜单管理，会出现对应的按钮项，勾选设置角色是否有按钮的权限。</p>\n<figure><img src=\"/adminblazor/0004.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<h2>审批</h2>\n<ul>\n<li>实体类继承 EntityAudited</li>\n<li>菜单编辑选择 【审批】</li>\n</ul>\n<figure><img src=\"/adminblazor/0006.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<ul>\n<li>待提交/反审，可修改/删除</li>\n<li>审核中/通过，已锁定业务数据，不可修改/删除</li>\n<li>EntityAudited 带版本功能、审计历史变化，且多端无法同时编辑（提示正在被[admin]编辑）</li>\n</ul>\n<figure><img src=\"/adminblazor/0007.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<h2>租户</h2>\n<p>提示：AdminContext 类型已注入为 Scoped</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AdminContext</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IServiceProvider</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Service</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SysTenant</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>每个租户独立数据库，注入方式：</p>\n<ul>\n<li>访问租户：IFreeSql/IAggregateRootRepository&lt;T&gt;</li>\n<li>访问主库：FreeSqlCloud</li>\n</ul>\n<blockquote>\n<p>FreeSqlCloud API 访问方式与 IFreeSql 一样\nIAggregateRootRepository 是级联操作友好的仓储模式</p>\n</blockquote>\n<figure><img src=\"/adminblazor/0005.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<h2>定时任务</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Scheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"任务1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"0/30 * * * * *\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Scheduler001</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"任务1 被触发...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Scheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"任务2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Interval</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> TaskInterval</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SEC</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Argument</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"10\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Scheduler002</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> service</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TaskInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"任务2 被触发...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//运行时 scheduler.AddTask(\"任务3\"...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Scheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"任务3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Scheduler003</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"任务3 被触发...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>组件</h2>\n<p>以下几个是 AdminBlazor 封装的组件，更多丰富的 UI 组件可以看：BootstrapBlazor</p>\n<h3>1. 增删改查 AdminTable2&lt;TItem&gt;</h3>\n<p>| 名称                                                        | 说明                            |\n|</p>\n",
      "image": "https://freesql.net/adminblazor/0008.png",
      "date_published": "2024-01-31T07:25:26.000Z",
      "date_modified": "2025-10-24T10:02:25.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "低代码",
      "url": "https://freesql.net/guide/lowcode.html",
      "id": "https://freesql.net/guide/lowcode.html",
      "summary": "低代码 本篇是继文档之后的大功能，专门为低代码设计。 FreeSql 默认依赖实体类型，虽然运行时可以动态创建 Type，但不断的动态编译导致会内存无法释放，对 Type 的版本也难以管理。 本功能是独立的，使用纯字典（无实体类型）进行 CRUD，支持导航属性，级联操作等功能。 注意：本功能是独立的，请勿与其他文档的级联机制搞混。 字典 CUD（单表）...",
      "content_html": "\n<p>本篇是继<a href=\"/guide/dynamic.html\" target=\"_blank\">《动态操作》</a>文档之后的大功能，专门为低代码设计。</p>\n<p>FreeSql 默认依赖实体类型，虽然运行时可以动态创建 Type，但不断的动态编译导致会内存无法释放，对 Type 的版本也难以管理。</p>\n<p>本功能是独立的，使用纯字典（无实体类型）进行 CRUD，支持导航属性，级联操作等功能。</p>\n<p>注意：本功能是独立的，请勿与其他文档的级联机制搞混。</p>\n<h2>字典 CUD（单表）</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UpdateDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WherePrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertOrUpdateDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WherePrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>InsertDict/UpdateDict/DeleteDict/InsertOrUpdateDict 都支持批量操作，对应类型 List&lt;Dictionary&lt;string, object&gt;&gt;</p>\n<h2>无类型 CRUD（更高级）</h2>\n<p>不依赖实体类型，不需要动态编译，纯字典操作，支持导航属性，级联保存，AOT 编译福音。</p>\n<p>nuget 安装：</p>\n<blockquote>\n<p>dotnet add package FreeSql.Extensions.ZeroEntity</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ZeroDbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">JsonConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeserializeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TableDescriptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[]&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">json</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//在文档后面</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> JsonConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeserializeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Name</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">user1</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Ext</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">    \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Remarks</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:[{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Remark</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">remark1</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Remark</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">remark2</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">  },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Claims</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:[{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ClaimName</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">claim1</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ClaimName</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">claim2</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ClaimName</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">claim3</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Roles</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:[{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Name</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">role1</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Name</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">role2</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> JsonConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeserializeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:1,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Name</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">user1111</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Ext</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:{},</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Claims</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:[{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:1,</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ClaimName</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">claim1111</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">3</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">,</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ClaimName</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">claim3222222</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ClaimName</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">claim0000</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Roles</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:[{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Name</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">role111100001</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:2,</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Name</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">role2</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Role]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Name]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">OUTPUT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Name]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Name]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'role1'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'role2'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Name]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">OUTPUT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Name]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Name]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'user1'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserExt]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserExtRemarks]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[RemarkId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Remark]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'6570e3f8-a226-c3ac-00d1-a3dd18b30339'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'remark1'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'6570e3f8-a226-c3ac-00d1-a3de16d9aa68'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'remark2'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserClaim]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[ClaimName]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">OUTPUT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[ClaimName]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [ClaimName]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'claim1'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'claim2'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'claim3'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserRole]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[RoleId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Role]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Name]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">OUTPUT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Name]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Name]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'role111100001'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'role2'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserClaim]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[ClaimName]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">OUTPUT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, INSERTED.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[ClaimName]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [ClaimName]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">N'claim0000'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INSERT INTO</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserRole]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[RoleId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">VALUES</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">7</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">8</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserRole]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [RoleId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserRole]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [RoleId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserClaim]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UPDATE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> SET</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Name]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> N'user1111'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UPDATE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserClaim]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> SET</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [ClaimName]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> CASE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Id]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHEN</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> THEN</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> N'claim1111'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHEN</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 3</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> THEN</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> N'claim3222222'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> END</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> IN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserRole]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [RoleId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 7</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">OR</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [RoleId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 8</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserClaim]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> IN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserExt]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>查询，返回结果是字典 Dictionary&lt;string, object&gt;：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//自动级联</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//单独查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SelectNoTracking</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  //.IncludeAll()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Ext.Remarks\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"remark\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"like\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"error\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Roles\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Users\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Ext.Remarks\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//普通多表查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SelectNoTracking</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserExt\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User.Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//[{id:1, UserExt:{} },..]</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>上述 ctx 对象依赖 json 配置如下：</p>\n<blockquote>\n<p>提示：ctx.LoadSchemaFromDatabase(\"User\") 从数据库动态加载描述（可能不完善）</p>\n</blockquote>\n<div class=\"language-json line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"json\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-json\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Comment\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"用户表\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Columns\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"IsIdentity\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.String\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Navigates\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Ext\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"OneToOne\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserExt\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Claims\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"OneToMany\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserClaim\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Bind\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Roles\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ManyToMany\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Role\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"ManyToMany\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserRole\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Indexes\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: []</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserExt\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Comment\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"用户扩展信息表\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Columns\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Navigates\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Remarks\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"OneToMany\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserExtRemarks\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Bind\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserExtRemarks\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Comment\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"用户扩展信息表-子表\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Columns\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"RemarkId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Guid\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Remark\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.String\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserClaim\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Comment\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"一对多测试表\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Columns\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"IsIdentity\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ClaimName\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.String\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Role\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Comment\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"权限表\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Columns\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"IsIdentity\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.String\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Navigates\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Users\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ManyToMany\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"ManyToMany\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserRole\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Indexes\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: []</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserRole\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Comment\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"多对多中间表\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Columns\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"RoleId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"IsPrimary\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"MapType\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"System.Int32\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ],</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"Navigates\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ManyToOne\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Bind\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Role\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Type\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ManyToOne\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"RelTable\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Role\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        \"Bind\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"RoleId\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>级联机制</h2>\n<p>理解本机制之前，请先忘记 Repository/DbContext 等之前的级联机制，他们没有关联。</p>\n<p>schemas[] 是一组表映射信息定义，包含表名、列名、导航属性、索引等信息</p>\n<ul>\n<li>导航属性：OneToOne/OneToMany/ManyToOne/ManyToMany</li>\n<li>聚合根：OneToOne/OneToMany/多对多中间表，作为一个整体看待</li>\n<li>外部根：ManyToOne/ManyToMany外部表，作为外部看待，它有自己的聚合根整体</li>\n</ul>\n<p>举例：</p>\n<ul>\n<li>User 为聚合根</li>\n<li>UserExt/UserClaim/UserRole 这三个表是子成员，一起存储/删除</li>\n<li>Role 为外部根（相对 User 而言，它自己是独立的聚合根）</li>\n</ul>\n<p>CURD 都是基于 schemas[0] 聚合根进行操作</p>\n<ul>\n<li>查询：贪婪加载所有子成员，以及外部根，以及外部根的外部根（递归）</li>\n<li>状态管理：快照聚合根副本（由于外部根也是聚合根，即外部根与聚合根是并行存储关系）</li>\n</ul>\n<p>对比保存：</p>\n<p>将当前操作的聚合根与状态管理的副本进行对比，计算出发生变化的列</p>\n<p>| 导航属性     | 副本       | 最新   | 动作                                   |\n|</p>\n",
      "date_published": "2023-12-07T05:53:21.000Z",
      "date_modified": "2025-04-18T06:21:41.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "QuestDB",
      "url": "https://freesql.net/guide/freesql-provider-questdb.html",
      "id": "https://freesql.net/guide/freesql-provider-questdb.html",
      "summary": "介绍 QuestDB 是一款针对时序数据实时处理优化的关系型列存数据库， 支持 Rest API 方式访问，同时兼容 PostgreSQL 访问协议，以及 InfluxDB 写入的访问协议。自带 Web Console，方便数据库的基本访问 QuestDB | 官网 安装包 FreeSql.Provider.QuestDb .NET CLI Packa...",
      "content_html": "<h2>介绍</h2>\n<p><code>QuestDB </code>是一款针对时序数据实时处理优化的关系型列存数据库， 支持 Rest API 方式访问，同时兼容 PostgreSQL 访问协议，以及 InfluxDB 写入的访问协议。自带 Web Console，方便数据库的基本访问</p>\n<p><a href=\"https://questdb.io/\" target=\"_blank\" rel=\"noopener noreferrer\">QuestDB | 官网 </a></p>\n<h2>安装包</h2>\n<p>FreeSql.Provider.QuestDb</p>\n<p>.NET CLI</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.QuestDb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>Package Manager</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Install-Package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.QuestDb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>声明</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">QuestDb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">       @\"host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)  </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//连接字符串</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseQuestDbRestAPI</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"localhost:9000\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"username\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"password\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)  </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//RestAPI，建议开启</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>特有功能</h2>\n<h4>QuestFunc</h4>\n<ul>\n<li>QuestFunc 实现了 QuestDB 官方文档的函数</li>\n<li>SelectLongSequence 对应 long_sequence</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SelectLongSequence</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rndstr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> QuestFunc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">rnd_str</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rnddate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> QuestFunc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">rnd_date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">QuestFunc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">to_date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2020\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyyy\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">QuestFunc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">to_date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2023\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyyy\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">From</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">rndstr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    SELECT rnd_str(10,5,10,0) \"rndstr\", rnd_date(to_date('2020','yyyy'),to_date('2023','yyyy'),0) \"rnddate\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    FROM long_sequence(10)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INNER JOIN \"user1\" b ON a.\"rndstr\" = b.\"username\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h4>Sample By</h4>\n<blockquote>\n<p>SAMPLE BY用于时间序列数据，将大型数据集汇总为同质时间块的聚合，作为SELECT语句的一部分</p>\n</blockquote>\n<p><a href=\"https://questdb.io/docs/reference/sql/sample-by/\" target=\"_blank\" rel=\"noopener noreferrer\">SAMPLE BY keyword | QuestDB</a></p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SampleBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SampleUnit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">day</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Activos</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>生成SQL</p>\n</blockquote>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Activos\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"count\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Table\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SAMPLE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> 1d</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;&gt;</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '1'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h4>GroupBy</h4>\n<blockquote>\n<p>需要注意的是 QuestDB 的 GroupBy 与其他关系型 数据库不同</p>\n</blockquote>\n<p><a href=\"https://questdb.io/docs/concept/sql-extensions/#group-by-is-optional\" target=\"_blank\" rel=\"noopener noreferrer\">官网说明：SQL extensions | QuestDB</a></p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//这里通过WithTempQuery实现</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>生成SQL</p>\n</blockquote>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"count\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Table\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;&gt;</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '1'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"count\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h4>Latest On</h4>\n<blockquote>\n<p>对于多个时间序列存储在同一个表中的场景，根据时间戳检索给定键或键组合的最新项</p>\n</blockquote>\n<p><a href=\"https://questdb.io/docs/reference/sql/latest-on/\" target=\"_blank\" rel=\"noopener noreferrer\">LATEST ON keyword | QuestDB</a></p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LatestOn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">q</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>生成SQL</p>\n</blockquote>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Table\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">LATEST </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">xxxx</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  PARTITION</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> BY</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">xxxx</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h4>BulkCopy</h4>\n<blockquote>\n<p>实测七列10W数据预热后只需1.5秒，100W数据14秒左右</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//需要启用RestAPI</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteBulkCopyAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>注意：RestAPI 不经过 ado.net，因为不触发 UseMonitorCommand/Aop.CommandBefore/After 等事件</p>\n<h4>自动分表、索引</h4>\n<blockquote>\n<p>QuestDB 支持自动分表</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Index</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id_Index\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Table</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //索引类型必须是symbol</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">DbType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"symbol\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> double</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Activos</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //按天分表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AutoSubtable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SubtableType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Day</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //特性标记类型必须是DateTime</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsCompra</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>常见问题</h2>\n<h4>table busy</h4>\n<p><strong>多线程并发查询时会出现 table busy [reason=insert] 异常</strong></p>\n<p><a href=\"https://questdb.io/docs/troubleshooting/faq/#why-do-i-get-table-busy-error-messages-when-inserting-data-over-postgresql-wire-protocol\" target=\"_blank\" rel=\"noopener noreferrer\">官网说明 | table busy </a></p>\n<blockquote>\n<p>解决方案，启用RestAPI后 Insert/Update就会默认使用HTTP方式</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//在FreeSqlBuilder增加UseQuestDbRestAPI()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">new</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseQuestDbRestAPI</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"localhost:9000\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"username\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"password\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>注意：RestAPI 不经过 ado.net，因为不触发 UseMonitorCommand/Aop.CommandBefore/After 等事件</p>\n<h4>RestAPI设置账号密码</h4>\n<p>QuestDb WebConsole并不支持设置账号密码，但是官网给出解决方案 使用Nginx代理</p>\n<p><a href=\"https://questdb.io/blog/2022/08/05/setting-basic-auth-nginx/#introduction\" target=\"_blank\" rel=\"noopener noreferrer\">Setting up Basic Authentication for QuestDB open source using Nginx | QuestDB</a></p>\n<h4>QuestDb不支持删除？</h4>\n<p><a href=\"https://questdb.io/docs/troubleshooting/faq/#how-do-i-delete-a-row\" target=\"_blank\" rel=\"noopener noreferrer\">FAQ | How do I delete a row?</a></p>\n<h2>在线测试</h2>\n<p><a href=\"https://demo.questdb.io/\" target=\"_blank\" rel=\"noopener noreferrer\">QuestDB | 在线测试 </a> 提供了最新的QuestDB发行版和示例数据集:</p>\n<ul>\n<li>Trips: 10 years of NYC taxi trips with 1.6 billion rows</li>\n<li>Trades: live crytocurrency market data with 30M+ rows per month</li>\n<li>Pos: geolocations of 250k unique ships over time</li>\n</ul>\n<p>| Query                                                                       | Execution time                                                                                                                                                          |\n|</p>\n",
      "date_published": "2023-02-22T05:25:18.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "聚合根（实验室）",
      "url": "https://freesql.net/guide/aggregateroot.html",
      "id": "https://freesql.net/guide/aggregateroot.html",
      "summary": "聚合根（实验室） FreeSql.DbContext 定义了 IBaseRepository<T> 仓储接口，（虽然）支持了级联保存、级联删除功能，（但是）使用时需要人工自己判断何时开启、何时使用。 本文看上去像 EF，实则有区别，主要区别在级联边界的规则设定，例如我们允许 OneToMany 从下层向上递归级联，但是仅限查询，不能增删改。研究目的希望...",
      "content_html": "\n<p>FreeSql.DbContext 定义了 IBaseRepository&lt;T&gt; 仓储接口，（虽然）支持了级联保存、级联删除功能，（但是）使用时需要人工自己判断何时开启、何时使用。</p>\n<p>本文看上去像 EF，实则有区别，主要区别在级联边界的规则设定，例如我们允许 OneToMany 从下层向上递归级联，但是仅限查询，不能增删改。研究目的希望从机制上杜绝痛点，让操作变得更可控。</p>\n<p><strong>AggregateRootRepository 是 IBaseRepository&lt;T&gt; 一种新的尝试实现</strong>，根据聚合根特点，实现可控的级联添加、级联更新、级联删除、级联查询（查询时自动 Include/IncludeMany）操作。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetAggregateRootRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><blockquote>\n<p>dotnet add package FreeSql.Extensions.AggregateRoot</p>\n</blockquote>\n<p>意见征集、讨论区：<a href=\"https://github.com/dotnetcore/FreeSql/discussions/1235\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql/discussions/1235</a></p>\n<p>接下来的内容，严重依赖<a href=\"/guide/navigate-attribute.html\" target=\"_blank\">【导航属性】</a>的正确配置，请先学会再继续向下！</p>\n<h2>设定边界</h2>\n<p>将一个主要的实体类认定为聚合根，设定好安全的管辖范围（边界），CRUD 时会把边界之内的所有内容看作一个整体。</p>\n<p>边界之外的导航属性，<code>增删改</code> 递归时会忽略：</p>\n<ul>\n<li>ManyToOne</li>\n<li>ManyToMany(外部表)</li>\n<li>PgArrayToMany</li>\n</ul>\n<p>边界之内的导航属性，<code>增删改</code> 递归时会级联操作：</p>\n<ul>\n<li>OneToOne</li>\n<li>OneToMany</li>\n<li>ManyToMany(中间表)</li>\n</ul>\n<p>示例1：在聚合根内递归所有 OneToOne/OneToMany 导航属性</p>\n<ul>\n<li>OneToOne: Order &lt;-&gt; OrderExt</li>\n<li>OneToMany: Order &lt;== OrderDetail</li>\n<li>OneToOne: OrderDetail &lt;-&gt; OrderDetailExt</li>\n<li>聚合根 Order 的管辖范围：Extdata、Details、Details[?].Extdata</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderExt</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Details</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderExt</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderDetail</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderDetailExt</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderDetailExt</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderDetailId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderDetail</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>示例2：在聚合根内递归所有 ManyToMany 导航属性对应的中间表</p>\n<ul>\n<li>ManyToMany: Order &lt;=&gt; Tag</li>\n<li>聚合根 Order 会根据 Tags 生成 OrderTag 中间表数据，进行管理</li>\n<li>聚合根 Order 不会管理 Tag 实体类，以及 Tag 向下延申的导航属性（外部表不属于管辖范围）</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    // ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">ManyToMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderTag</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> TagId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">TagId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">ManyToMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderTag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Orders</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>插入数据</h2>\n<p>根据上面设定的边界，插入时会自动 <code>级联插入</code> 边界以内的内容。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Field2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Details</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field4_01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetailExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field5_01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field4_02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetailExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field5_02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field4_03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetailExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field5_03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new [] { </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//级联插入</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>插入 Order 表记录；</li>\n<li>插入 OrderExt 表记录；</li>\n<li>插入 OrderDetail 表记录；</li>\n<li>插入 OrderDetailExt 表记录；</li>\n<li>插入 OrderTag 表记录；（不会插入 Tag 表记录）</li>\n</ul>\n<blockquote>\n<p>注意：即使 order.Tags 在数据库不存在，也不会插入 Tag 表记录</p>\n</blockquote>\n<h2>查询数据</h2>\n<p>根据上面设定的边界，查询时会自动 <code>Include/IncludeMany</code> 边界以内的内容。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>效果等同于：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Details</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>扩展查询边界：</p>\n<blockquote>\n<p>提示：[AggregateRootBoundary(\"name\", Break = true)] 设置边界范围，请往后面看。。</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AggregateRootRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OrderRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) : </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">base</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ?? </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AggregateRootUtils</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetAutoIncludeQueryStaicCode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //控制台输出一块 Include/IncludeMany 字符串，内容与下方 SelectDiy 代码块相同</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ISelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SelectDiy</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //.TrackToList(this.SelectAggregateRootTracking) 状态跟踪</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Details</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>重写 Select 可以把边界以外的数据一起查询出来（例如 ManyToOne 导航属性），但是 <code>添加/修改/删除</code> 仍然采用默认边界规则</p>\n<p>手工使用 SelectDiy Include/IncludeMany 包含内容，如果小于默认边界规则，则建议不要开启 <code>状态跟踪</code> （保存数据可能造成不一致），反之则应该开启。（详细请往后看 <code>更新数据</code>）</p>\n<h2>删除数据</h2>\n<p>根据上面设定的边界，删除时会自动 <code>级联删除</code> 边界以内的内容。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><ul>\n<li>删除 OrderExt 表对应的记录；</li>\n<li>删除 OrderDetailExt 表对应的记录；</li>\n<li>删除 OrderDetail 表对应的记录；</li>\n<li>删除 OrderTag 表对应的记录；（不会删除 Tag 表记录）</li>\n<li>删除 Order 表对应的记录；</li>\n</ul>\n<p>删除数据是在内存递归 order 实例进行的，因此需要使用 repository 提前查询，内容庞大时有性能缺陷。</p>\n<p>如果设置了数据库表外键的级联删除功能，则只需删除 Order 表对应的记录，并且不需要提前查询。</p>\n<h2>更新数据</h2>\n<p>根据上面设定的边界，更新时会自动 <code>级联保存</code> 边界以内的内容。</p>\n<p>repository.Attach 存储更新前的数据快照（查询会自动快照），称为副本，repository.Update 的时候和副本进行级联对比保存。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//此时已自动 Attach</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Details</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RemoveAt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Details</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Field5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field5_01_01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Field2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field2_02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>添加 OrderTag 表记录；（不会管理 Tag 表记录）</li>\n<li>删除 OrderDetail 表记录；</li>\n<li>删除 OrderDetailExt 表记录；</li>\n<li>更新 OrderDetailExt 表记录；</li>\n<li>更新 Order 表记录；</li>\n</ul>\n<p><code>完整保存</code> 先查询再更新，机制容易理解，数据一致性也更有保障。但是如果聚合根下内容较庞大，将会造成性能问题。</p>\n<p>例如 Order 下面的评论数据大约有 1000 条，每天还不断有新的记录，每次 Load 内存再保存代价就太大了。</p>\n<p>利用对比保存的特点，可以变向实现 <code>追加记录</code>：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    // ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Comments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderComment</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//单表数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Attach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//快照时 Comments 是 NULL/EMPTY</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Comments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Comments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field6_01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Comments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Field6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"field6_02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>使用 fsql 只查询了单表数据；</li>\n<li>order 本身没发生变化，所以不更新 Order 表记录；</li>\n<li>添加 OrderComment 表记录2条；</li>\n</ul>\n<blockquote>\n<p>我为什么不直接对 OrderComment 进行单表操作啊？？？</p>\n</blockquote>\n<blockquote>\n<p>答案你们回答！！！</p>\n</blockquote>\n<p><code>对比保存</code> 规则说明：</p>\n<p>| 导航属性  | 副本       | 最新   | 结果                                              |\n|</p>\n",
      "date_published": "2022-09-04T08:40:48.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "FreeSql+CAP事务",
      "url": "https://freesql.net/extra/freesql-cap.html",
      "id": "https://freesql.net/extra/freesql-cap.html",
      "summary": "FreeSql+CAP事务 背景描述 在CAP中，事务对象需要交给CAP进行提交从而在事务实现提交后对缓存消息到 Broker 的 Flush 动作，而目前的Orm大部分都有自己的事务管理对象进行事务的提交。CAP官方直接原生支持使用 ADO.NET 和 EntityFrameworkCore 进行事务集成，而对于第三方ORM本文提供了一种扩展用以集成...",
      "content_html": "\n<h2>背景描述</h2>\n<p>在CAP中，事务对象需要交给CAP进行提交从而在事务实现提交后对缓存消息到 Broker 的 Flush 动作，而目前的Orm大部分都有自己的事务管理对象进行事务的提交。CAP官方直接原生支持使用 ADO.NET 和 EntityFrameworkCore 进行事务集成，而对于第三方ORM本文提供了一种扩展用以集成的示例。</p>\n<p>接入有二种方式</p>\n<ul>\n<li>安装<code>FreeSql</code>包</li>\n</ul>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.DbContext</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.MySqlConnector</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>安装<code>CAP</code>相关包</li>\n</ul>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Savorboard.CAP.InMemoryMessageQueue</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> DotNetCore.CAP.MySql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> DotNetCore.CAP.Dashboard</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>服务</h2>\n<ul>\n<li>appsetttings.json</li>\n</ul>\n<div class=\"language-json line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"json\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-json\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  \"ConnectionStrings\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    \"MySql\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Data Source=localhost;Port=3306;User ID=root;Password=root;Initial Catalog=lincms;Charset=utf8mb4;SslMode=none;Max pool size=1;Connection LifeTime=20\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>配置相关服务</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IConfigurationSection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> mysqlSelection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> configuration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetSection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"ConnectionStrings:MySql\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mysqlSelection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseNameConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NameConvertType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PascalCaseToUnderscoreWithLower</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Trace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \";\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>CAP相关服务\n<a href=\"https://cap.dotnetcore.xyz/user-guide/zh/storage/mysql/\" target=\"_blank\" rel=\"noopener noreferrer\">https://cap.dotnetcore.xyz/user-guide/zh/storage/mysql/</a></li>\n</ul>\n<p>至少你要配置一个消息队列和一个事件存储（UseMySql）</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddCap</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseInMemoryMessageQueue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">=&gt;{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            //MySqlOptions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> mysqlSelection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // x.UseXXX ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">         x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseDashboard</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>默认情况下，你可以访问 <a href=\"http://localhost:xxx/cap\" target=\"_blank\" rel=\"noopener noreferrer\">http://localhost:xxx/cap</a> 这个地址打开Dashboard。</p>\n<h2>方式一</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> CapUnitOfWorkExtensions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Flush</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">this</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ICapTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> capTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            capTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetMethod</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Flush\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">BindingFlags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Instance</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> |</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> BindingFlags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NonPublic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Invoke</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">capTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ICapTransaction</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> BeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">this</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ICapPublisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> autoCommit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dbTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetOrBeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> ActivatorUtilities</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateInstance</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MySqlCapTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dbTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AutoCommit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> autoCommit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">this</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ICapTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> capTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            capTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Flush</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>使用方式</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> BookController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Controller</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">HttpGet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"~/freesql/unitofwork\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> FreeSqlUnitOfWorkManagerTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">([</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Book</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ICapPublisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> capBus</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">            ICapTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> trans</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">capBus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Book</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"叶老板\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"FreeSql源码解析与实战\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                Summary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"带你了解FreeSql源码细节，掌握FreeSql的实战操作，扩展FreeSql的功能，提升你的开发效率。\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            capBus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Publish</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"freesql.time\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            trans</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">NonAction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CapSubscribe</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"freesql.time\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> GetTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"time:{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">time</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"book\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Book</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">StringLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 30</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">StringLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Summary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">StringLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 50</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>方式二</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> FreeSqlRepositoryPatternTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CapTransactionBase</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> FreeSqlRepositoryPatternTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IDispatcher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> dispatcher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) : </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">base</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dispatcher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IUnitOfWork</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">DbTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetOrBeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">        Flush</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> CommitAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CancellationToken</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> cancellationToken</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> default)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">NotImplementedException</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> RollbackAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CancellationToken</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> cancellationToken</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> default)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">NotImplementedException</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Extensions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      // 注意：你可以酌情修改此扩展以支持你的使用习惯，参考下方讨论内容</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">      public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ICapTransaction</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> BeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">this</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ICapPublisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> autoCommit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dispatcher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRequiredService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IDispatcher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlRepositoryPatternTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dispatcher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                AutoCommit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> autoCommit</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> publisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>使用方式：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">HttpGet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"~/freesql/Withtransaction\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> WithTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">([</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Book</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ICapPublisher</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> capBus</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        ICapTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> trans</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">capBus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Book</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"叶老板\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"FreeSql源码解析与实战\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Summary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"带你了解FreeSql源码细节，掌握FreeSql的实战操作，扩展FreeSql的功能，提升你的开发效率。\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        capBus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Publish</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"freesql.time\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        trans</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>二者区别在于后者，<code>trans.Commit()</code>不需要传递``IUnitOfWork`参数</p>\n<h2>原文参考</h2>\n<ul>\n<li><a href=\"https://www.cnblogs.com/igeekfan/p/cap_freesql_flush.html\" target=\"_blank\" rel=\"noopener noreferrer\">FreeSql 接入 CAP 的实践</a></li>\n<li><a href=\"https://github.com/dotnetcore/FreeSql/discussions/1202\" target=\"_blank\" rel=\"noopener noreferrer\">如何使 FreeSql 和 CAP 进行集成</a></li>\n</ul>\n",
      "date_published": "2022-08-31T14:37:49.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "FreeSql.AdminLTE",
      "url": "https://freesql.net/guide/freesqladminlte.html",
      "id": "https://freesql.net/guide/freesqladminlte.html",
      "summary": "FreeSql.AdminLTE 它是 FreeSql 衍生出来的 .NETCore MVC 中间件扩展包 FreeSql.AdminLTE.Preview.dll，基于 AdminLTE 前端框架动态产生实体的增删查改界面。 推荐使用：AdminBlazor 集成了菜单、角色、用户、公司组织、定时任务、数据字典、参数配置、租户、审批、审计等功能。 d...",
      "content_html": "\n<p>它是 FreeSql 衍生出来的 .NETCore MVC 中间件扩展包 FreeSql.AdminLTE.Preview.dll，基于 AdminLTE 前端框架动态产生实体的增删查改界面。</p>\n<blockquote>\n<p>推荐使用：<a href=\"AdminBlazor\">AdminBlazor</a> 集成了菜单、角色、用户、公司组织、定时任务、数据字典、参数配置、租户、审批、审计等功能。</p>\n</blockquote>\n<blockquote>\n<p>dotnet add packages FreeSql.AdminLTE.Preview</p>\n</blockquote>\n<p>输入：实体1、实体2、实体3</p>\n<p>输出：后台管理的功能</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseFreeAdminLtePreview</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"/\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Config</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Role</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Menu</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Employee</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Position</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AppLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">LoginLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OprationLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeScheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TaskInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">    typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeScheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TaskLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>只需要传入实体，就可以生产 curd 的管理功能，是不是有些骚啊~~~</p>\n<figure><img src=\"https://user-images.githubusercontent.com/16286519/187557633-351e3fbe-ae87-461f-9e45-f1c31c6a2b92.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<figure><img src=\"https://user-images.githubusercontent.com/16286519/187557677-5333484e-92d3-42a4-8543-6baf89814540.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<p>对于通用后台管理系统的生成，除了单纯的对单表 crud 操作外，我还喜欢利用导航属性的操作，比如：</p>\n<p>1、Song、Tag 多对多场景，添加/更新 Song 时可以把 Tag 一起保存；</p>\n<p>2、列表页，希望外键、多对多出现在过滤筛选条件；</p>\n<p>3、列表页，希望枚举出现在过滤筛选条件；</p>\n<p>4、删除时，级联删除所有相关数据；</p>\n<p>等等诸如此类的繁琐操作，之所以说繁琐，是因为这些工作技术不难，属于严重的重复劳动。</p>\n<h2>机制设定</h2>\n<p>1、添加、修改数据</p>\n<p>中件间产生的界面包括添加、修改数据的功能，普通实体的根据属性的类型与 Html5 UI 一一映射；</p>\n<p>比较特殊的映射规则：</p>\n<p>| c# 类型             | Html5    |\n|</p>\n",
      "image": "https://user-images.githubusercontent.com/16286519/187557633-351e3fbe-ae87-461f-9e45-f1c31c6a2b92.png",
      "date_published": "2022-08-30T23:01:53.000Z",
      "date_modified": "2025-03-15T16:02:54.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "FreeIM",
      "url": "https://freesql.net/guide/freeim.html",
      "id": "https://freesql.net/guide/freeim.html",
      "summary": "FreeIM FreeIM v2.0.0 调整：已将 ClientId Guid 改为 long； 修复：JoinChan/LeaveChan 数量统计问题； 增加：SendBroadcastMessage 广播消息； 优化：SendChanMessage 性能； FreeIM 使用 websocket 协议实现简易、高性能（单机支持5万+连接）、集群...",
      "content_html": "\n<h2>FreeIM v2.0.0</h2>\n<ul>\n<li>调整：已将 ClientId Guid 改为 long；</li>\n<li>修复：JoinChan/LeaveChan 数量统计问题；</li>\n<li>增加：SendBroadcastMessage 广播消息；</li>\n<li>优化：SendChanMessage 性能；</li>\n</ul>\n<p>FreeIM 使用 websocket 协议实现简易、高性能（单机支持5万+连接）、集群即时通讯组件，支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。</p>\n<p>使用场景：好友聊天、群聊天、直播间、实时评论区、游戏。</p>\n<p><em>接受定制项目开发，详细请联系作者</em></p>\n<p>开源地址：<a href=\"https://github.com/2881099/FreeIM\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/2881099/FreeIM</a></p>\n<p>扩展资料：<a href=\"https://www.cnblogs.com/FreeSql/p/16632727.html\" target=\"_blank\" rel=\"noopener noreferrer\">《C#.NET im 聊天通讯架构设计 -- FreeIM 支持集群、职责分明、高性能》</a></p>\n<blockquote>\n<p>dotnet add package FreeIM</p>\n</blockquote>\n<h1>定制服务</h1>\n<ul>\n<li>前端：Flutter、uniapp</li>\n<li>后端：.NET10 + Redis + MySql + Clickhouse + Kafka (高性能、万人群、群直播）</li>\n<li>功能：好友、群、签到、红包、直播、语聊、后台管理系统、系统推送</li>\n<li>配置：会员等级、谁不能删除谁、谁能领红包等等</li>\n<li>价格：根据功能谈价</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th><img src=\"/freeim/001.png\" alt=\"image\" loading=\"lazy\"></th>\n<th><img src=\"/freeim/002.png\" alt=\"image\" loading=\"lazy\"></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><img src=\"/freeim/003.png\" alt=\"image\" loading=\"lazy\"></td>\n<td><img src=\"/freeim/004.png\" alt=\"image\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td><img src=\"/freeim/005.png\" alt=\"image\" loading=\"lazy\"></td>\n<td><img src=\"/freeim/006.png\" alt=\"image\" loading=\"lazy\"></td>\n</tr>\n</tbody>\n</table>\n<figure><img src=\"/freeim/007.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<h2>ImServer 服务端</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Configure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IApplicationBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseFreeImServer</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ImServerOptions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Redis</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeRedis</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">RedisClient</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"127.0.0.1:6379,poolsize=5\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Servers</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new[] { </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"127.0.0.1:6001\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }, </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//集群配置</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Server</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"127.0.0.1:6001\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//dotnet run --urls=http://127.0.0.1:6001</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>一套永远不需要迭代更新的 <code>ImServer</code> 服务端，支持 .NET6.0、.NETCore2.1+、NETStandard2.0</p>\n</blockquote>\n<h2>WebApi 业务端</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Configure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IApplicationBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //...</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    ImHelper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Initialization</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ImClientOptions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Redis</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeRedis</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">RedisClient</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"127.0.0.1:6379,poolsize=5\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Servers</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new[] { </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"127.0.0.1:6001\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    ImHelper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">EventBus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">clientId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"上线了\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">clientId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"下线了\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| ImHelper方法          | 参数                                 | 描述                            |\n|</p>\n",
      "image": "https://freesql.net/freeim/001.png",
      "date_published": "2022-08-30T05:43:50.000Z",
      "date_modified": "2025-12-18T10:33:38.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "FreeScheduler",
      "url": "https://freesql.net/guide/freescheduler.html",
      "id": "https://freesql.net/guide/freescheduler.html",
      "summary": "FreeScheduler FreeScheduler 是利用 IdleBus 实现的轻量化定时任务调度，支持集群、临时的延时任务和重复循环任务(可持久化)，可按秒，每天/每周/每月固定时间，自定义间隔执行，支持 .NET Core 2.1+、.NET Framework 4.0+ 运行环境。 开源地址：https://github.com/28810...",
      "content_html": "\n<p>FreeScheduler 是利用 IdleBus 实现的轻量化定时任务调度，支持集群、临时的延时任务和重复循环任务(可持久化)，可按秒，每天/每周/每月固定时间，自定义间隔执行，支持 .NET Core 2.1+、.NET Framework 4.0+ 运行环境。</p>\n<p>开源地址：<a href=\"https://github.com/2881099/FreeScheduler\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/2881099/FreeScheduler</a></p>\n<p>扩展资料：<a href=\"https://www.cnblogs.com/FreeSql/p/16623030.html\" target=\"_blank\" rel=\"noopener noreferrer\">《.NET 定时任务 -- FreeScheduler 支持 cron、持久化、可变定时设置》</a></p>\n<h2>快速开始</h2>\n<blockquote>\n<p>dotnet add package FreeScheduler</p>\n</blockquote>\n<blockquote>\n<p>Install-Package FreeScheduler</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Scheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> scheduler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSchedulerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseTimeZone</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TimeSpan</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromHours</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">8</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//默认为UTC时间，国内可指定时区+8，任务将按本地时间执行</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OnExecuting</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"[{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">(\"HH:mm:ss.fff\")}] {</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">task</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">} 被执行\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        switch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"武林大会\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Wulin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Body</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">break</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"攻城活动\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AttackCity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Body</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">break</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| Method                                    | 说明                                   |\n|</p>\n",
      "image": "https://freesql.net/281375469-a5d5f4bb-6af9-4695-9570-8777c39d7329.png",
      "date_published": "2022-08-30T05:41:38.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "FreeRedis",
      "url": "https://freesql.net/guide/freeredis.html",
      "id": "https://freesql.net/guide/freeredis.html",
      "summary": "FreeRedis CSRedisCore 是 .NETFramework 4.0 及以上 访问 redis-server 的客户端组件，也是 FreeSql 作者早年发布的 nuget 版本。 后来重构了更简易的 FreeRedis，目前推荐大家使用 FreeRedis，支持几乎所有 .NET 平台和 AOT。 开源地址：https://github...",
      "content_html": "\n<p><code>CSRedisCore</code> 是 .NETFramework 4.0 及以上 访问 redis-server 的客户端组件，也是 FreeSql 作者早年发布的 nuget 版本。</p>\n<p>后来重构了更简易的 <code>FreeRedis</code>，目前推荐大家使用 <code>FreeRedis</code>，支持几乎所有 .NET 平台和 AOT。</p>\n<p>开源地址：<a href=\"https://github.com/2881099/FreeRedis\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/2881099/FreeRedis</a></p>\n<ul>\n<li>🌈 所有方法名与 redis-cli 保持一致</li>\n<li>🌌 支持 Redis 集群（服务端要求 3.2 及以上版本）</li>\n<li>⛳ 支持 Redis 哨兵模式</li>\n<li>🎣 支持主从分离（Master-Slave）</li>\n<li>📡 支持发布订阅（Pub-Sub）</li>\n<li>📃 支持 Redis Lua 脚本</li>\n<li>💻 支持管道（Pipeline）、支持事务、延迟队列、RediSearch</li>\n<li>🌴 支持 GEO 命令（服务端要求 3.2 及以上版本）</li>\n<li>🌲 支持 STREAM 类型命令（服务端要求 5.0 及以上版本）</li>\n<li>⚡ 支持本地缓存（Client-side-cahing，服务端要求 6.0 及以上版本）</li>\n<li>🌳 支持 Redis 6 的 RESP3 协议</li>\n</ul>\n<h2>🚀 快速入门</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> RedisClient</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> cli</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">RedisClient</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"127.0.0.1:6379,password=123,defaultDatabase=13\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//cli.Serialize = obj =&gt; JsonConvert.SerializeObject(obj);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//cli.Deserialize = (json, type) =&gt; JsonConvert.DeserializeObject(json, type);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cli</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Notice</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//打印命令日志</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cli</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"value1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cli</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">MSet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"value1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"value2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> value1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> cli</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">vals</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> cli</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">MGet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>支持 STRING、HASH、LIST、SET、ZSET、BITMAP、HyperLogLog、GEO、Stream 以及布隆过滤器等。</p>\n</blockquote>\n<p>| 参数            |    默认值 | 说明                                                              |\n| :</p>\n",
      "date_published": "2022-08-30T05:39:40.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "其他作品",
      "url": "https://freesql.net/guide/otherworks.html",
      "id": "https://freesql.net/guide/otherworks.html",
      "summary": "其他作品 FreeSql 作者是一个入行 18 年的老批，他目前写的开源项目还有： 更早的作品可以直接访问 https://github.com/2881099 查看。 AdminBlazor AdminBlazor 是一款 Blazor Server SaaS 中台项目，支持 RABC 权限菜单/按钮，支持快速代码生成一对一、一对多、多对多导航属性的...",
      "content_html": "\n<p>FreeSql 作者是一个入行 18 年的老批，他目前写的开源项目还有：</p>\n<p>| 开源项目                          | 描述                | 开源地址                                        | 开源协议  |\n|</p>\n",
      "date_published": "2022-08-30T05:35:49.000Z",
      "date_modified": "2025-03-20T05:57:57.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "联合查询",
      "url": "https://freesql.net/guide/unionall.html",
      "id": "https://freesql.net/guide/unionall.html",
      "summary": "联合查询 在之前都是推荐使用 ToSql + WithSql 完成联合查询操作，v3.2.666 新增功能直接使用 UnionAll 方法。 GroupBy + WithTempQuery(嵌套查询) + FromQuery + UnionAll 组合使用，会让查询功能更加强大、灵活。 单表 UNION ALL 多表 UNION ALL 注意：如上 S...",
      "content_html": "\n<p>在之前都是推荐使用 ToSql + WithSql 完成联合查询操作，v3.2.666 新增功能直接使用 UnionAll 方法。</p>\n<p>GroupBy + WithTempQuery(嵌套查询) + FromQuery + UnionAll 组合使用，会让查询功能更加强大、灵活。</p>\n<h2>单表 UNION ALL</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UnionAll</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> OR</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>多表 UNION ALL</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//匿名类型</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UnionAll</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//匿名类型</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupName\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        INNER JOIN</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"UserGroup\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupName\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        INNER JOIN</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"UserGroup\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> OR</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>注意：如上 SQL 会执行报错，因为 User、UserGroup 都存在相同的 Id 字段名称，暂时的解决办法需要指定字段</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupName</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>WithParameters 参数化共享</h2>\n<p>开启参数化查询功能后，使用 WithParameters 共享参数化，可避免产生相同的参数名称：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dbpars</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbParameter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithParameters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dbpars</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UnionAll</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithParameters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dbpars</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> @exp_0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> @exp_1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> OR</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-08-26T09:40:43.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "动态操作",
      "url": "https://freesql.net/guide/dynamic.html",
      "id": "https://freesql.net/guide/dynamic.html",
      "summary": "动态操作 弱类型 CRUD v3.2.695 emit 动态创建实体类型 字典 CUD InsertDict/UpdateDict/DeleteDict/InsertOrUpdateDict 都支持批量操作，对应类型 List<Dictionary<string, object>> 无类型 CRUD（更高级） 不依赖实体类型，不需要动态编译，纯字典操作...",
      "content_html": "\n<h2>弱类型 CRUD</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">实体类型</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AppendData</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">data</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">实体类型</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">data</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">实体类型</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//fsql.Select&lt;object&gt;()...</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//或者仓储</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">实体类型</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(..);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(..);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(..);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertOrUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(..);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>v3.2.695 emit 动态创建实体类型</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DynamicEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"user\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"t_user\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> rue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"username\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">StringLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 32</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如果有必要，请将 table 缓存起来</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExistsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//创建表</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"username\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//将字典转化成 type 对应的 object</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//也可以直接使用 InsertDict/UpdateDict/DeleteDict 等字典 CUD 功能</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> obj</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateInstance</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AppendData</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">obj</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">obj</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertOrUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">obj</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereDynamic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">obj</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">objs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>字典 CUD</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UpdateDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WherePrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertOrUpdateDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WherePrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>InsertDict/UpdateDict/DeleteDict/InsertOrUpdateDict 都支持批量操作，对应类型 List&lt;Dictionary&lt;string, object&gt;&gt;</p>\n<h2>无类型 CRUD（更高级）</h2>\n<p>不依赖实体类型，不需要动态编译，纯字典操作，支持导航属性，级联保存，AOT 编译福音。</p>\n<p>内容较长，请移步<a href=\"/guide/lowcode.html\" target=\"_blank\">《低代码》</a></p>\n<h2>动态表名</h2>\n<p>1、仓储 Repository</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">old</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">old</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表 CRUD</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//repo.AsTable((t, old) =&gt; $\"{old}_201903\"); //对 Log_201903 表 CRUD（级联有关表也增加该后辍）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、原生 IFreeSql</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">old</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">old</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Log_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表插入</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Log_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表更新</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Log_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表删除</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertOrUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Log_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表插入或更新</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>动态条件</h2>\n<p>1、ISelect.Where(string sql) 使用原生条件：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"a.id &gt; 0\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//提示：存在SQL注入安全问题</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>2、动态 Lambda 表达式</p>\n<ul>\n<li><code>And</code>、<code>Or</code>扩展方法 <a href=\"https://github.com/dotnetcore/FreeSql/blob/master/FreeSql/Extensions/LambadaExpressionExtensions.cs\" target=\"_blank\" rel=\"noopener noreferrer\">LambadaExpressionExtensions.cs</a></li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Expression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Func</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">And</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Or</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE id &gt; 10 OR id = 1</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>3、ISelect.WhereDynamicFilter 方法实现动态过滤条件（与前端交互），支持的操作符：</p>\n<ul>\n<li>Contains/StartsWith/EndsWith/NotContains/NotStartsWith/NotEndsWith：包含/不包含，like '%xx%'，或者 like 'xx%'，或者 like '%xx'</li>\n<li>Equal/NotEqual：等于/不等于</li>\n<li>GreaterThan/GreaterThanOrEqual：大于/大于等于</li>\n<li>LessThan/LessThanOrEqual：小于/小于等于</li>\n<li>Range：范围查询</li>\n<li>DateRange：日期范围，有特殊处理 value[1] + 1</li>\n<li>Any/NotAny：是否符合 value 中任何一项（直白的说是 SQL IN）</li>\n<li>Custom：自定义解析</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DynamicFilterInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dyfilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> JsonConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeserializeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DynamicFilterInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Logic</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">And</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">  \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Filters</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">  [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">    { </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Field</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Operator</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Equals</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Value</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: 1 },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">      \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Logic</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Or</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">      \"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Filters</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">      [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        { </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Field</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Operator</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Equals</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Value</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: 2 },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        { </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Field</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">id</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Operator</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Equals</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Value</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\"\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">: 3 }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">      ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">  ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereDynamicFilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dyfilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE id = 1 AND (id = 2 OR id = 3)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p><a href=\"https://www.cnblogs.com/FreeSql/p/16485310.html\" target=\"_blank\" rel=\"noopener noreferrer\">《高效理解 FreeSql WhereDynamicFilter，深入了解设计初衷》</a></p>\n<p>实现 Custom 的例子：</p>\n<div class=\"language-json line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"json\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-json\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  \"Logic\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"And\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  \"Filters\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Field\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Operator\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Equals\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Value\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">      \"Logic\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Or\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">      \"Filters\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: [</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        { </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Field\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Operator\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Equals\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">\"Value\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">          \"Field\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"{{ DynamicFilterCustomImpl.CustomLinq }}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">          \"Operator\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Custom\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">          \"Value\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Title.StartsWith('new topic 1')\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  ]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dyfilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> JsonConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeserializeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DynamicFilterInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">json</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereDynamicFilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dyfilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// WHERE id = 1 AND (id = 2 OR title like 'new topic 1%')</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//nuget 安装 System.Linq.Dynamic.Core</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DynamicFilterCustomImpl</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //JSON Field 对应这个值</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> CustomLinq</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> $\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">nameof</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DynamicFilterCustomImpl</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DynamicLinq</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">)} {</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DynamicFilterCustomImpl</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FullName</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">},{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DynamicFilterCustomImpl</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assembly</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FullName</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DynamicFilterCustom</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> LambdaExpression</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> DynamicLinq</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> sender</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsNullOrWhiteSpace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)) </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"1==2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        ParameterExpression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Expression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parameter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">sender</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetGenericArguments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">], </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"t\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> exp</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DynamicExpressionParser</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ParseLambda</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ParameterExpression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[] { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> exp</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>动态排序</h2>\n<p>1、ISelect.OrderBy(string sql) 使用原生排序：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"a.id desc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//提示：存在SQL注入安全问题</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>2、ISelect.OrderByPropertyName 使用属性名排序：</p>\n<ul>\n<li>支持导航属性，比如 OrderByPropertyName(\"Parent.Code\")</li>\n<li>支持多表查询，比如 OrderByPropertyName(\"b.Code\")</li>\n</ul>\n<h2>动态贪婪加载</h2>\n<p>1、ISelect.IncludeByPropertyName 方法实现动态贪婪加载，对应 Include/IncludeMany：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Parent.Parent.Parent\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Childs\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Childs\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Parent.Parent\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Parent.Childs\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、List&lt;TDto&gt;.IncludeByPropertyName 扩展方法也实现了 OneToMany 动态贪婪加载：</p>\n<blockquote>\n<p>非实体类型，也可以级联加载，他们不需要配置导航属性关系。</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dtos</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dtos</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Childs\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ParentId=Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//临时关系</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    take</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id,name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Parent\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>动态返回数据</h2>\n<p>1、ISelect.ToList 使用原生SQL返回数据：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"a.id,a.name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//提示：存在SQL注入安全问题</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、ISelect.ToDataTableByPropertyName 使用属性名返回数据：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DataTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToDataTableByPropertyName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new [] {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        \"Parent.Code\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        \"b.Id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>动态片段</h2>\n<p>FreeSql 提供 Where(sql)、GroupBy(sql)、OrderBy(sql)、ToList(sql) 等直接使用 SQL 片段的 API。</p>\n<p><strong>使用这些 API 时请务必注意SQL注入安全问题。</strong></p>\n<p>不建议前端直接 POST SQL 到后端使用它们，而应该在后端做一层映射，例如：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> whereMapping</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"where1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"a.id &gt; {0}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"where2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"len(a.name) &gt; {0}\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> orderByMapping</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"order1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"a.id asc, a.name desc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"order2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"len(a.name) desc\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//假设前端 POST 内容是 postWhere=where1&amp;postWhereValue=100&amp;postOrder=order1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Region</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        whereMapping</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">TryGetValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">postWhere</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">out</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> whereSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Format</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">whereSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">postWhereValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        orderByMapping</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">TryGetValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">postOrder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">out</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> orderSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        orderSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-08-15T16:01:12.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "BaseEntity",
      "url": "https://freesql.net/extra/freesql-extensions-baseentity.html",
      "id": "https://freesql.net/extra/freesql-extensions-baseentity.html",
      "summary": "前言 尝试过 ado.net、dapper、ef，以及Repository仓储，甚至自己还写过生成器工具，以便做常规CRUD操作。 它们日常操作不方便之处： 每次使用前需要声明，再操作； 很多人一个实体类，对应一个操作类（或DAL、DbContext、Repository）； BaseEntity 是一种极简单的 CodeFirst 开发方式，特别对单...",
      "content_html": "<h2>前言</h2>\n<p>尝试过 ado.net、dapper、ef，以及Repository仓储，甚至自己还写过生成器工具，以便做常规CRUD操作。</p>\n<p>它们日常操作不方便之处：</p>\n<ul>\n<li>\n<p>每次使用前需要声明，再操作；</p>\n</li>\n<li>\n<p>很多人一个实体类，对应一个操作类（或DAL、DbContext、Repository）；</p>\n</li>\n</ul>\n<p>BaseEntity 是一种极简单的 CodeFirst 开发方式，特别对单表或多表CRUD，利用继承节省了每个实体类的重复属性（创建时间、ID等字段），软删除等功能，进行 crud 操作时不必时常考虑仓储的使用；</p>\n<p>本文介绍 BaseEntity 一种极简约的 CRUD 操作方法。</p>\n<h2>功能特点</h2>\n<ul>\n<li>\n<p>自动迁移实体结构（CodeFirst），到数据库；</p>\n</li>\n<li>\n<p>直接操作实体的方法，进行 CRUD 操作；</p>\n</li>\n<li>\n<p>简化用户定义实体类型，省去主键、常用字段的配置（如CreateTime、UpdateTime）；</p>\n</li>\n<li>\n<p>实现单表、多表查询的软删除逻辑；</p>\n</li>\n</ul>\n<h2>声明</h2>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Extensions.BaseEntity</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.Sqlite</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Initialization</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>1、定义一个主键 int 并且自增的实体类型，BaseEntity TKey 指定为 int/long 时，会认为主键是自增；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如果不想主键是自增键，可以重写属性：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>有关更多实体的特性配置，请参考资料：<a href=\"/guide/entity-attribute.html\" target=\"_blank\">实体特性</a></p>\n</blockquote>\n<p>2、定义一个主键 Guid 的实体类型，保存数据时会自动产生有序不重复的 Guid 值（不用自己指定 Guid.NewGuid()）；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> UserName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>CRUD 使用</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//添加</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"组一\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//更新</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"组二\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//添加或更新</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Save</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//软删除</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//恢复软删除</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Restore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//根据主键获取对象</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Find</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//查询数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>实体类型.Select 是一个查询对象，使用方法和 FreeSql.ISelect 一样；</p>\n<p>支持多表查询时，软删除条件会附加在每个表中；</p>\n<blockquote>\n<p>有关更多查询方法，请参考资料：<a href=\"/guide/select.html\" target=\"_blank\">查询</a></p>\n</blockquote>\n<h2>事务建议</h2>\n<p>1、同线程事务，不支持异步：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(() =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //todo ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">})</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、如果你是异步控</p>\n<p>由于 AsyncLocal 平台兼容不好，所以交给外部管理事务。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">_asyncUow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Initialization</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_asyncUow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>在 Scoped 开始时：_asyncUow.Value = fsql.CreateUnitOfWork(); (也可以使用 UnitOfWorkManager 对象获取 uow)</p>\n<p>在 Scoped 结束时：_asyncUow.Value = null;</p>\n<p>如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    _asyncUow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //todo ... BaseEntity 内部 curd 方法保持使用 uow 事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        _asyncUow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-08-11T15:34:05.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "级联删除",
      "url": "https://freesql.net/guide/cascade-delete.html",
      "id": "https://freesql.net/guide/cascade-delete.html",
      "summary": "级联删除 接下来的内容，严重依赖的正确配置，请先学会再继续向下！ 级联只针对 OneToOne/OneToMany/ManyToMany 三种导航属性，文档已经解释过。 基于【对象】级联删除 比如 查询的对象，可以使用此方法级联删除它们。 基于【数据库】级联删除 根据设置的导航属性，递归删除 OneToOne/OneToMany/ManyToMany ...",
      "content_html": "\n<p>接下来的内容，严重依赖<a href=\"/guide/navigate-attribute.html\" target=\"_blank\">【导航属性】</a>的正确配置，请先学会再继续向下！</p>\n<p>级联只针对 OneToOne/OneToMany/ManyToMany 三种导航属性，<a href=\"/guide/cascade-saving.html\" target=\"_blank\">级联保存</a>文档已经解释过。</p>\n<h2>基于【对象】级联删除</h2>\n<blockquote>\n<p>比如 <a href=\"/guide/select-include.html#_2%E3%80%81%E5%AF%BC%E8%88%AA%E5%B1%9E%E6%80%A7-manytoone-onetoone\" target=\"_blank\">Include/IncludeMany</a> 查询的对象，可以使用此方法级联删除它们。</p>\n</blockquote>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EnableCascadeSave</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//关键设置</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"group01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"admin01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"pwd01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"用户备注01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"admin02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"pwd02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"用户备注02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"admin03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"pwd03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"用户备注03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//级联添加测试数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO \"usergroup\"(\"groupname\") VALUES('group01') RETURNING \"id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO \"user\"(\"username\", \"password\", \"groupid\") VALUES('admin01', 'pwd01', 1), ('admin02', 'pwd02', 1), ('admin03', 'pwd03', 1) RETURNING \"id\" as \"Id\", \"username\" as \"Username\", \"password\" as \"Password\", \"groupid\" as \"GroupId\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO \"userext\"(\"userid\", \"remark\") VALUES(3, '用户备注01'), (4, '用户备注02'), (5, '用户备注03')</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> groups</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">groups</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//级联删除，递归向下遍历 group OneToOne/OneToMany/ManyToMany 导航属性</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"userext\" WHERE (\"userid\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"user\" WHERE (\"id\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"usergroup\" WHERE (\"id\" = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>基于【数据库】级联删除</h2>\n<blockquote>\n<p>根据设置的导航属性，递归删除 OneToOne/OneToMany/ManyToMany 对应数据，并返回已删除的数据。此功能不依赖数据库外键</p>\n</blockquote>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ret</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteCascadeByDatabase</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.\"id\", a.\"username\", a.\"password\", a.\"groupid\" FROM \"user\" a WHERE (a.\"groupid\" = 1)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.\"userid\", a.\"remark\" FROM \"userext\" a WHERE (a.\"userid\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"userext\" WHERE (\"userid\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"user\" WHERE (\"id\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"usergroup\" WHERE (\"id\" = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//ret   Count = 7 System.Collections.Generic.List&lt;object&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [0] {UserExt} object {UserExt}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [1] {UserExt} object {UserExt}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [2] {UserExt} object {UserExt}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [3] {User}     object {User}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [4] {User}     object {User}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [5] {User}   object {User}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [6] {UserGroup} object {UserGroup}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserGroup</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserExt</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserExt</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-07-30T09:07:52.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "嵌套查询 ✨",
      "url": "https://freesql.net/guide/withtempquery.html",
      "id": "https://freesql.net/guide/withtempquery.html",
      "summary": "嵌套查询 ✨ WithTempQuery 需求版本：v3.2.666+ GroupBy + WithTempQuery(嵌套查询) + FromQuery + UnionAll 组合使用，会让查询功能更加强大、灵活。 注意：FromQuery 多个 WithTempQuery 匿名类型时，确保不是同一个类型（可使用任意属性区分） #1620 场景1：查...",
      "content_html": "\n<h2>WithTempQuery</h2>\n<p>需求版本：v3.2.666+</p>\n<p>GroupBy + WithTempQuery(嵌套查询) + FromQuery + UnionAll 组合使用，会让查询功能更加强大、灵活。</p>\n<p>注意：FromQuery 多个 WithTempQuery 匿名类型时，确保不是同一个类型（可使用任意属性区分） <a href=\"https://github.com/dotnetcore/FreeSql/issues/1620\" target=\"_blank\" rel=\"noopener noreferrer\">#1620</a></p>\n<h2>场景1：查询分组第一条记录</h2>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RowNumber</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">PartitionBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：支持多表嵌套查询，fsql.Select&lt;User1, UserGroup1&gt;()</p>\n</blockquote>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">row_number</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">partition</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> order by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[rownum]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User1]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[rownum]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如果数据库不支持开窗函数，可以使用分组嵌套查询解决：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">From</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\"> min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[min]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User1]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    GROUP BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User1]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[min]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>场景2：嵌套查询 + Join</h2>\n<p>WithTempQuery + From&lt;T2&gt; 或 FromQuery(ISelect&lt;T2&gt;) 可实现无限联表</p>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RowNumber</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">PartitionBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //.From&lt;UserExt&gt;() //普通联表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//子查询联表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //.FromQuery(fsql.Select&lt;UserExt, UserGroup, xxx&gt;() //子多表查询联表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //    .WithTempQuery((a,b,c) =&gt; new { ... }))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        userext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">row_number</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">partition</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> order by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[rownum]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User1]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1000</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Remark]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserExt]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[rownum]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>场景3：分组查询嵌套</h2>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RowNumber</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">PartitionBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sum1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) }))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"name03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"name02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">rownum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        groupby</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">row_number</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">partition</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> order by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[rownum]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User1]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Remark]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[sum1]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserExt]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    GROUP BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Remark]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UserId]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[rownum]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> N'name03'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> OR</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Nickname]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> N'name02'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>场景4：内存数据嵌套</h2>\n<p>假设跨数据库服务器，或者数据表被缓存过，WithMemory 便可以实现数据表与内存关联查询。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> listSql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMemory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UserGroup]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[Id]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[GroupId]</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>场景5：自动分表后分页 分组聚合</h2>\n<p>自动分表后，如果有分页的需求 或者分组聚合的需求可以参考以下代码</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Statistics</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">createtime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BetweenEnd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">startTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">endTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))  </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//时间字段定位表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">shareId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">out</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> total</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">limit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Sid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Sum1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">field1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Sum2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">field2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`shareId`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as1, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">( a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`field1`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) as3, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">( a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`field2`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) as5</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `Statistics_2023`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`createtime`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '2022-01-01 00:00:00'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`createtime`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '2023-01-14 00:00:00'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ) ftb</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `Statistics_2022`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`createtime`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '2022-01-01 00:00:00'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`createtime`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '2023-01-14 00:00:00'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ) ftb</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">GROUP BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`shareId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LIMIT</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">30</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>场景6：FromQuery 多个查询，最后映射查询</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> query2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">LoadPlan</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Instruction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">LoadNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">LoadNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UnitTransactionType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"TO\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">InstructionNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">InstructionNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">LoadNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SeqNoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DeliveryInstractionStatus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UpTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        RN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RowNumber</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">PartitionBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UnitId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderByDescending</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SeqNoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> query3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Unit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">query2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">query3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SeqNoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SeqNoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UnitId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UnitId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">RN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MB51_View</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //CkassIfCation = a.CkassIfCation,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        PGI</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DeliveryInstractionStatus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        PGITime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UpTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        IsDelayPGI</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        RunNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">RunNo</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[CkassIfCation]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as1, b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[DeliveryInstractionStatus]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as2, b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UpTime]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as3, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as4, c.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[RunNo]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as5</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UnitLog]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[LoadNo]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[SeqNoLog]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, c.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[DeliveryInstractionStatus]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, c.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UpTime]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">row_number</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">partition</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UnitId]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> order by</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[SeqNoLog]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> desc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[RN]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [UnitLog]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [LoadPlan]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[LoadNo]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[LoadNo]</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UnitTransactionType]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> N'TO'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Instruction]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> c </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[InstructionNo]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> c.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[InstructionNo]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[SeqNoLog]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[SeqNoLog]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [Unit]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> c </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UnitId]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> c.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[UnitId]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (b.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">[RN]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>场景7：报表（每日）</h2>\n<ol>\n<li>从内存创建连续的日期 List</li>\n<li>使用 FromQuery 与多个 ISelect 横向 LeftJoin</li>\n</ol>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> startDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2024-11-1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> endDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2024-12-1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMemory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Enumerable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Range</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">endDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Subtract</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">startDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TotalDays</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> startDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddDays</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyyy-MM-dd\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; ...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BetweenEnd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">startDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">endDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyyy-MM-dd\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Type1Total</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Qty1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) }),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BetweenEnd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">startDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">endDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyyy-MM-dd\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Type2Total</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Qty2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) }),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //... 最多支持 16 个 ISelect 合并</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderByDescending</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Sum1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type1Total</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Sum2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type2Total</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>WithParameters 参数化共享</h2>\n<p>开启参数化查询功能后，使用 WithParameters 共享参数化，可避免产生相同的参数名称：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dbpars</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbParameter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithParameters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dbpars</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FromQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithParameters</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dbpars</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> @exp_0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"GroupId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Username\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"User1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> @exp_1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-07-23T05:30:46.000Z",
      "date_modified": "2026-01-06T02:19:14.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Castle AOP + FreeSql 跨方法异步事务",
      "url": "https://freesql.net/extra/aop-freesql-autofac.html",
      "id": "https://freesql.net/extra/aop-freesql-autofac.html",
      "summary": "Castle AOP + FreeSql 跨方法异步事务 使用Autofac基于特性标签，实现跨方法的异步事务处理 Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy Castle.Core.AsyncInterceptor(异步方法AOP拦截) FreeSql基础服务 ...",
      "content_html": "\n<p>使用Autofac基于特性标签，实现跨方法的异步事务处理</p>\n<ul>\n<li>Autofac.Extensions.DependencyInjection</li>\n<li>Autofac.Extras.DynamicProxy</li>\n<li>Castle.Core.AsyncInterceptor(异步方法AOP拦截)</li>\n</ul>\n<h2>FreeSql基础服务</h2>\n<h3>安装FreeSql包</h3>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.DbContext</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Provider.MySqlConnector</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>手动创建一个MySql/MariaDB数据库,名为<code>ovov_freesql_repository</code></p>\n<h3>appsettings.json</h3>\n<div class=\"language-json line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"json\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-json\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  \"Default\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=ovov_freesql_repository;Charset=utf8;SslMode=none;Max pool size=10\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>配置FreeSql服务</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ConfigureServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceCollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">  IConfigurationSection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Default</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">  =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Configuration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetSection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Default\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Default</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseNameConvert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NameConvertType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PascalCaseToUnderscoreWithLower</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Trace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Startup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>Autofac+AOP实现异步事务</h2>\n<ul>\n<li><a href=\"https://github.com/luoyunchong/dotnetcore-examples/blob/master/ORM/FreeSql/OvOv.FreeSql.AutoFac.DynamicProxy\" target=\"_blank\" rel=\"noopener noreferrer\">OvOv.FreeSql.AutoFac.DynamicProxy</a></li>\n</ul>\n<p>csproj</p>\n<div class=\"language-csproj line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csproj\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csproj\"><span class=\"line\"><span>&lt;PackageReference Include=\"Autofac.Extensions.DependencyInjection\" Version=\"6.0.0\" /&gt;</span></span>\n<span class=\"line\"><span>&lt;PackageReference Include=\"Autofac.Extras.DynamicProxy\" Version=\"5.0.0\" /&gt;</span></span>\n<span class=\"line\"><span>&lt;PackageReference Include=\"Castle.Core.AsyncInterceptor\" Version=\"1.7.0\" /&gt;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>或</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Autofac.Extensions.DependencyInjection</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Autofac.Extras.DynamicProxy</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> add</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> package</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Castle.Core.AsyncInterceptor</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>创建一个标识事务的特性标签</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AttributeUsage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AttributeTargets</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Method</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Inherited</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Attribute</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 事务传播方式</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Propagation</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Required</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 事务隔离级别</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(){}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> isolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> isolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>Autofac集成</h2>\n<p>Program.CS 替换默认的DI CreateHostBuilder方法</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Host</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateDefaultBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">args</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseServiceProviderFactory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AutofacServiceProviderFactory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>Startup.cs配置服务</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ConfigureContainer</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ContainerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterModule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AutofacModule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>.NET6 这样注册</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Host</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseServiceProviderFactory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AutofacServiceProviderFactory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ConfigureContainer</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ContainerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">webBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">containerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">          containerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterModule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AutofacModule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>这里给BlogService方法注入UnitOfWorkInterceptor拦截处理。直接注入类。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AutofacModule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Autofac</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Module</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    protected</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Load</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ContainerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BlogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InterceptedBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">EnableClassInterceptors</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>AOP</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UnitOfWorkInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInterceptor</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> asyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> UnitOfWorkInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> interceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            asyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> interceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Intercept</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            asyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Intercept</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IAsyncInterceptor</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UnitOfWorkManager</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ILogger</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">_logger</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        IUnitOfWork</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ILogger</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">logger</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            _unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            _logger</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> logger</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> bool</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> TryBegin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> method</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MethodInvocationTarget</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ?? </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Method</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> attribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> method</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetCustomAttributes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstOrDefault</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">attribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> is </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                return</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            return</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// 拦截同步执行的方法</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"invocation\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> InterceptSynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">TryBegin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Proceed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                catch</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                    throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            else</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Proceed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// 拦截返回结果为Task的方法</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"invocation\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> InterceptAsynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">             invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> InternalInterceptAsynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> async</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> InternalInterceptAsynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">TryBegin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Proceed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                        await (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                catch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                    throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            else</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Proceed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                    await (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// 拦截返回结果为Task</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">的方法</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"invocation\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">typeparam</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"TResult\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">typeparam</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> InterceptAsynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> InternalInterceptAsynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> async</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InternalInterceptAsynchronous</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IInvocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">            TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">TryBegin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Proceed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                    result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> await (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                catch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                    throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    _unitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            else</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Proceed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">                result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> await (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">invocation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>当Service层没有接口，则必须使用virtual虚方法。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> BlogService</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// 当出现异常时，不会插入数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"createBlogDto\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Transactional</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> CreateBlogTransactional</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CreateBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">            Blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Map</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            _blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">            List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ForEach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">TagName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"abc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test exception\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            _tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li><a href=\"https://github.com/luoyunchong/dotnetcore-examples/blob/4f4c908dc40e4c0b96ad92ad5437d071a43162cb/ORM/FreeSql/OvOv.FreeSql.AutoFac.DynamicProxy/Services/BlogService.cs#L65\" target=\"_blank\" rel=\"noopener noreferrer\">BlogService.cs#L65</a></li>\n</ul>\n<p>当传入的参数，title为abc时，会出现异常，<code>throw new Exception(\"test exception\");</code>,前面插入的数据并没有成功，会自动回滚。</p>\n<h2>Autofac批量注册</h2>\n<ul>\n<li>Autofac支持批量注入以Service后缀的接口。该方法在lin-cms-dotnetcore项目中有使用<a href=\"https://github.com/luoyunchong/lin-cms-dotnetcore/blob/master/src/LinCms.Web/Startup/Configuration/ServiceModule.cs\" target=\"_blank\" rel=\"noopener noreferrer\">LinCms.Web/Startup/Configuration/ServiceModule.cs</a></li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ServiceModule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Autofac</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Module</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    protected</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Load</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ContainerBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkAsyncInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">interceptorServiceTypes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">            typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkInterceptor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //service所在dll，LinCms.Application为程序集名称，也可以通过typeof(程序集中的某个类即可).Assembly获取</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        Assembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> servicesDllFile</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Assembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Load</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"LinCms.Application\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RegisterAssemblyTypes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">servicesDllFile</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">EndsWith</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Service\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsAbstract</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsInterface</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsPublic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsImplementedInterfaces</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InstancePerLifetimeScope</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">PropertiesAutowired</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 属性注入</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InterceptedBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">interceptorServiceTypes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToArray</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">EnableInterfaceInterceptors</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">     }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>当我们使用Autofac批量注册服务后，可以直接使用Service层的接口，不需要再使用注入。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> interface</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBlogService</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">  Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> CreateBlogTransactionalAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CreateBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> BlogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBlogService</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBlogRepository</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ITagRepository</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IMapper</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> BlogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBlogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ITagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IMapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ?? </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ArgumentNullException</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ?? </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ArgumentNullException</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ?? </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ArgumentNullException</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Transactional</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> async</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> CreateBlogTransactionalAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CreateBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        Blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _mapper</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Map</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_blogRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">blog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ForEach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">TagName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"abc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test exception CreateBlogTransactionalAsync\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_tagRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>使用</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Route</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"api/[controller]\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ApiController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> BlogController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ControllerBase</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBlogService</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _blogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> BlogController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBlogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> blogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _blogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">blogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">HttpPost</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"CreateBlogTransactionalAsync\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> async</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> CreateBlogTransactionalAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">([</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromBody</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CreateBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_blogService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateBlogTransactionalAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">createBlogDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-07-18T15:41:00.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "国产数据库",
      "url": "https://freesql.net/guide/freesql-provider-custom.html",
      "id": "https://freesql.net/guide/freesql-provider-custom.html",
      "summary": "国产数据库 由于太多，在此不一一列举，它们大多数语法兼容 MySql、Oracle、SqlServer、PostgreSQL 四种常用数据库之一。 FreeSql.Provider.Custom 提供了这四种数据库适配，并且支持 CodeFirst/DbFirst 以及完整的 FreeSql 功能。 FreeSql.Provider.Custom 不依...",
      "content_html": "\n<p>| 数据库名称      | 提供者                                         | 系列风格   |\n|</p>\n",
      "date_published": "2022-07-09T09:12:12.000Z",
      "date_modified": "2025-03-19T14:57:42.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "ODBC",
      "url": "https://freesql.net/guide/freesql-provider-odbc.html",
      "id": "https://freesql.net/guide/freesql-provider-odbc.html",
      "summary": "FreeSql.Provider.Odbc 实现 ODBC 访问数据库，ODBC 属于比较原始的技术，更新慢，各大数据库厂支持得标准不一，不到万不得已最好别用 odbc，坑比较多。 FreeSql.Provider.Odbc 做了多种数据库的专用实现：SqlServer、PostgreSQL、Oracle、MySql、达梦、人大金仓，和一种通用实现。 ...",
      "content_html": "<p>FreeSql.Provider.Odbc 实现 ODBC 访问数据库，ODBC 属于比较原始的技术，更新慢，各大数据库厂支持得标准不一，不到万不得已最好别用 odbc，坑比较多。</p>\n<p>FreeSql.Provider.Odbc 做了多种数据库的专用实现：SqlServer、PostgreSQL、Oracle、MySql、达梦、人大金仓，和一种通用实现。</p>\n<p>和原来的 FreeSql.Provider.SqlServer 等 ado.net 相比，只支持较少的基础类型，其他功能几乎都有，包括 CodeFirst 自动迁移。</p>\n<p>国产数据库大多数都兼容 SqlServer、PostgreSQL、Oracle、MySql 这四种数据库，所以它们也可以用来访问国产数据库。</p>\n<h1>自定义适配</h1>\n<p>通用实现为了让用户自己适配更多的数据库，比如连接 mssql 2000、db2 等数据库，牺牲了一些功能：</p>\n<ul>\n<li>不支持 CodeFirst 自动迁移</li>\n<li>不支持 DbFirst 接口方法的实现</li>\n<li>不支持 原来的分页方法，需要自行判断 id 进行分页</li>\n<li>只支持较少的基础类型：bool,sbyte,short,int,long,byte,ushort,uint,ulong,double,float,decimal,DateTime,byte[],string,Guid</li>\n</ul>\n<p>使用者只需求重写类 FreeSql.Odbc.Default.OdbcAdapter 就可以自定义访问不同的数据库。</p>\n<p>我们默认做了一套 sqlserver 的语法和映射适配，代码在 <a href=\"https://github.com/2881099/FreeSql/blob/master/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs\" target=\"_blank\" rel=\"noopener noreferrer\">Default/OdbcAdapter.cs</a>，请查看代码了解。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Mssql2000Adapter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Odbc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Default</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OdbcAdapter</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> InsertAfterGetIdentitySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"SELECT SCOPE_IDENTITY()\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //可以重写更多的设置</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetOdbcAdapter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Mssql2000Adapter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>适配好新的 OdbcAdapter 后，请在 FreeSqlBuilder.Build 之后调用 IFreeSql.SetOdbcAdapter 方法生效。</p>\n",
      "date_published": "2022-07-09T09:12:12.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "FreeSql 实现审计日志",
      "url": "https://freesql.net/extra/freesql-auditlog.html",
      "id": "https://freesql.net/extra/freesql-auditlog.html",
      "summary": "FreeSql 实现审计日志 有两种情况，如果都是针对实体操作，确实很好做这个功能。 IFreeSql 更新/删除，都可以不传实体进行操作，所以这个 old_values, new_values 实现起来比较麻烦（可能需要查询一次？性能？）。另外还有批量操作。 1、fsql.Aop.CurdAfter 事件是 CRUD 之后触发，提供以下参数 2、Fr...",
      "content_html": "\n<p>有两种情况，如果都是针对实体操作，确实很好做这个功能。</p>\n<p>IFreeSql 更新/删除，都可以不传实体进行操作，所以这个 old_values, new_values 实现起来比较麻烦（可能需要查询一次？性能？）。另外还有批量操作。</p>\n<h2>1、fsql.Aop.CurdAfter 事件是 CRUD 之后触发，提供以下参数</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 标识符，可将 CurdBefore 与 CurdAfter 进行匹配</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Identifier</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">protected</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">protected</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Stopwatch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Stopwatch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 操作类型</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> CurdType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> CurdType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//Select, Delete, Update, Insert, InsertOrUpdate</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// &lt;summary&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 实体类型</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// &lt;/summary&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> EntityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 实体类型的元数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> TableInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 执行的 SQL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 参数化命令</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DbParameter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">DbParms</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 发生的错误</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 执行SQL命令，返回的结果</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ExecuteResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 耗时（单位：Ticks）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> ElapsedTicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Stopwatch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ElapsedTicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 耗时（单位：毫秒）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> ElapsedMilliseconds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Stopwatch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ElapsedMilliseconds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>2、FreeSql.DbContext 或者 FreeSql.UnitOfWork 提供对象变化跟踪</h2>\n<p>全局设置：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetDbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>单独设置 DbContext 或者 UnitOfWork：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateDbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>参数 report 是一个 List 集合，集合元素的类型定义如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ChangeInfo</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EntityChangeType</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// Type = Update 的时候，获取更新之前的对象</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> BeforeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 实体类型</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Type</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> EntityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> enum</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EntityChangeType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { Insert, Update, Delete, SqlRaw }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| 变化类型 | 说明           |\n|</p>\n",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Docker+ FreeSql",
      "url": "https://freesql.net/extra/freesql-docker.html",
      "id": "https://freesql.net/extra/freesql-docker.html",
      "summary": "Docker+ FreeSql .net5+Docker+ Encryption(ssl/tls) handshake failed .net5 网站使用Sqlserver数据库部署在docker容器内运行报主库链接失败 环境 数据库：Sqlserver2014 网站程序：.Net5 Docker版本：Docker version 19.03.13, ...",
      "content_html": "\n<h2>.net5+Docker+ Encryption(ssl/tls) handshake failed</h2>\n<p>.net5 网站使用Sqlserver数据库部署在docker容器内运行报主库链接失败</p>\n<h3>环境</h3>\n<p>数据库：Sqlserver2014\n网站程序：.Net5\nDocker版本：Docker version 19.03.13,\n.net5环境镜像源：mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim\nCentos版本：CentOS Linux release 7.9.2009 (Core)</p>\n<h3>使用原生方式进行测试</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlConnection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> connection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlConnection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Data Source=xxxxx;User Id=sa;Password=xxxxxx;Initial Catalog=xxxxxxxx;Pooling=true;Min Pool Size=1;\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    connection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Open</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    connection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Close</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    connection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>报错</h3>\n<p>A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)</p>\n<h3>最终解决方案</h3>\n<p>在dockerfile里面加上这么两句</p>\n<div class=\"language-dockerfile line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"dockerfile\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-dockerfile\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RUN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> sed -i </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'s/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> /etc/ssl/openssl.cnf</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RUN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> sed -i </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'s/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> /usr/lib/ssl/openssl.cnf</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p><strong>将TLSv1.2设为TLSv1，只能是设为TLSv1而不是设为TLSv1.0</strong></p>\n<h2>原文链接</h2>\n<ul>\n<li><a href=\"https://github.com/dotnetcore/FreeSql/issues/650\" target=\"_blank\" rel=\"noopener noreferrer\">.net5 网站使用Sqlserver数据库部署在docker容器内运行报主库链接失败 · Issue #650 · dotnetcore/FreeSql (github.com)</a></li>\n</ul>\n",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2022-06-24T16:45:08.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "ISelect 拷贝克隆(copy/clone)",
      "url": "https://freesql.net/extra/iselect-depcopy.html",
      "id": "https://freesql.net/extra/iselect-depcopy.html",
      "summary": "ISelect 拷贝克隆(copy/clone) 当一个 ISelect 构造到一定复杂程序之后，比如： 利用语法糖解决： 科普： csharp 7.0 支持本地函数，方法内再定义临时方法，这个特性向大家推荐，在很多时候都非常有效。 方法内还可以定义方法，那就称它：本地函数/嵌套方法。 原文链接 技巧：ISelect 如何拷贝(copy)复用，克隆(c...",
      "content_html": "\n<p>当一个 ISelect 构造到一定复杂程序之后，比如：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> select1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AdmRoute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">!</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsNullOrEmpty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mn_Roles_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Roles</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsSelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mn_Roles_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)));</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> select2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> select1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    select1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Status</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //此时 select2 也附加了 a.Status == 0 条件</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>利用语法糖解决：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    ISelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AdmRoute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetSelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AdmRoute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">!</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsNullOrEmpty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Extdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mn_Roles_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Roles</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsSelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mn_Roles_Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)));</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> select1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> GetSelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> select2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> GetSelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    select1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Status</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //此时 select2 不会附加 a.Status == 0 条件</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>科普：</p>\n<p>csharp 7.0 支持本地函数，<strong>方法内再定义临时方法</strong>，这个特性向大家推荐，在很多时候都非常有效。</p>\n<p>方法内还可以定义方法，那就称它：本地函数/嵌套方法。</p>\n<h2>原文链接</h2>\n<ul>\n<li><a href=\"https://github.com/dotnetcore/FreeSql/issues/644\" target=\"_blank\" rel=\"noopener noreferrer\">技巧：ISelect 如何拷贝(copy)复用，克隆(clone) · Issue #644 · dotnetcore/FreeSql (github.com)</a></li>\n</ul>\n",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2022-08-30T23:16:37.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "动态聚合列 sum(case when ...)",
      "url": "https://freesql.net/extra/issues-expression-groupbysum.html",
      "id": "https://freesql.net/extra/issues-expression-groupbysum.html",
      "summary": "动态聚合列 sum(case when ...) 如上 v1,v2,v3 是动态聚合值，如果 where IN (1,2,3,4) 那就会产生 v1-v4 正常情况下，静态的 lambda 查询没办法处理这种动态列查询。 变通一下，这样查询： 如此便可以使用 FreeSql 实现： 自定义解析表达式树，实现如下：",
      "content_html": "\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Time\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">v1 </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\"> sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">case</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> when</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> else</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> end</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">v2 </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\"> sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">case</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> when</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> else</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> end</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">v3 </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\"> sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">case</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> when</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 3</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> else</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> end</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"table\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> IN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">GROUP BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Time\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如上 v1,v2,v3 是动态聚合值，如果 where IN (1,2,3,4) 那就会产生 v1-v4</p>\n<p>正常情况下，静态的 lambda 查询没办法处理这种动态列查询。</p>\n",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "In多列查询，表达式自定义实现",
      "url": "https://freesql.net/extra/issues-in-valuetype.html",
      "id": "https://freesql.net/extra/issues-in-valuetype.html",
      "summary": "In多列查询，表达式自定义实现 FreeSql 基础库为了不依赖 System.ValueType.dll，所以将以下代码抽离了出来。 Oracle 产生如下SQL： 非 ORACLE 产生如下 SQL： v3.2.650 使用 .Where(a => list.Any(b => b.Item1 == a. Id && b.Item2 == a. ct...",
      "content_html": "\n<p>FreeSql 基础库为了不依赖 System.ValueType.dll，所以将以下代码抽离了出来。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//元组集合</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ct1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>Oracle 产生如下SQL：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> .. </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ct1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'685ee1f6-bdf6-4719-a291-c709b8a1378f'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'2019-12-07 23:55:27'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'5ecd838a-06a0-4c81-be43-1e77633b7404'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'2019-12-07 23:55:27'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>非 ORACLE 产生如下 SQL：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> .. </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '685ee1f6-bdf6-4719-a291-c709b8a1378f'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ct1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '2019-12-07 23:55:27'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> OR</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '5ecd838a-06a0-4c81-be43-1e77633b7404'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ct1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '2019-12-07 23:55:27'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>v3.2.650 使用 .Where(a =&gt; list.Any(b =&gt; b.Item1 == a. Id &amp;&amp; b.Item2 == a. ct1))</p>\n</blockquote>\n<p>代码实现：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DataAnnotations</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Collections</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Generic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Linq</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Text</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> System</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Threading</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ExpressionCall</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyFreeSqlExpressionCall</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ThreadLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ExpressionCallContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ThreadLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ExpressionCallContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// C#：从元组集合中查找 exp1, exp2 是否存在</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// SQL： </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// exp1 = that[0].Item1 and exp2 = that[0].Item2 OR </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// exp1 = that[1].Item1 and exp2 = that[1].Item2 OR </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// ... </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 注意：当 that 为 null 或 empty 时，返回 1=0 </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">para</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// Oracle： (Id, Name) IN ((1, \"name1\"), (2, \"name2\"))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">typeparam</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"T1\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">typeparam</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">typeparam</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"T2\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">typeparam</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"that\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"exp1\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"exp2\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">returns</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">returns</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> bool</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;([</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">RawValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">this</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IEnumerable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">that</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> exp1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> exp2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsValueCreated</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParsedContent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> that</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Equals</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">exp1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Equals</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">exp2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">that</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">!=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"1=0\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            return</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">StringBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> idx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        switch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            case</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Oracle</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            case</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OdbcOracle</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"(\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParsedContent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"exp1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\", \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParsedContent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"exp2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">])</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\") IN (\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                foreach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> that</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">idx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">++</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\", \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                    sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"(\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FormatSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Internal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Utils</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetDataReaderValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\", \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FormatSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Internal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Utils</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetDataReaderValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\")\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\")\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                return</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        foreach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> that</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">idx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">++</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\" OR </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\r\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            sb</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParsedContent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"exp1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\" = \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FormatSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Internal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Utils</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetDataReaderValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\" AND \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParsedContent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"exp2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\" = \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Append</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FormatSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Internal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Utils</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetDataReaderValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        expContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> sb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Mysql 5.5 兼容性",
      "url": "https://freesql.net/extra/issues-mysql5_5.html",
      "id": "https://freesql.net/extra/issues-mysql5_5.html",
      "summary": "Mysql 5.5 兼容性 Mysql 5.5 不支持 datetime(3)，导致 codefirst 报错 二种解决办法： 1、[Column(DbType = \"DATETIME\")] 2、统一处理的话写个AOP",
      "content_html": "\n<h2>Mysql 5.5 不支持 datetime(3)，导致 codefirst 报错</h2>\n<p>二种解决办法：</p>\n<p>1、[Column(DbType = \"DATETIME\")]</p>\n<p>2、统一处理的话写个AOP</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">         e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"DATETIME\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2022-06-24T16:45:08.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "MySql 系列数据库",
      "url": "https://freesql.net/guide/freesql-provider-mysqlconnector.html",
      "id": "https://freesql.net/guide/freesql-provider-mysqlconnector.html",
      "summary": "FreeSql.Provider.MySqlConnector是FreeSql基于社区提供的最新的MySqlConnector驱动的实现，兼容性、性能都比FreeSql.Provider.MySql好，且支持多种数据库，如：MySQL, MariaDB, Percona, Amazon Aurora, Azure Database for MySQL,...",
      "content_html": "<!-- # FreeSql.Provider.MySqlConnector -->\n<p><code>FreeSql.Provider.MySqlConnector</code>是<code>FreeSql</code>基于社区提供的最新的<a href=\"https://github.com/mysql-net/MySqlConnector\" target=\"_blank\" rel=\"noopener noreferrer\"><code>MySqlConnector</code></a>驱动的实现，兼容性、性能都比<code>FreeSql.Provider.MySql</code>好，且支持多种数据库，如：<code>MySQL, MariaDB, Percona, Amazon Aurora, Azure Database for MySQL, Google Cloud SQL for MySQL, OceanBase, Doris, Tidb</code></p>\n<p>并且支持BulkCopy，<strong>推荐使用</strong></p>\n<p>如果你使用 <code>FreeSql.Provider.MySql</code> 发生了以下错误，请<strong>替换</strong>到 FreeSql.Provider.MySqlConnector：</p>\n<ul>\n<li>The given key '0' was not present in the dictionary.</li>\n<li>The given key '25653' was not present in the dictionary.</li>\n<li>The given key '26995' was not present in the dictionary.</li>\n<li>The given key '28261 was not present in the dictionary.</li>\n<li>The given key '65535' was not present in the dictionary.</li>\n<li>The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.</li>\n<li>Parameter '@xxx' must be defined.</li>\n<li>Object cannot be cast from DBNull to other types.</li>\n</ul>\n<h2>MySql Enum 映射</h2>\n<p>默认情况 c# 枚举会映射为 MySql Enum 类型，如果想映射为 int 在 FreeSqlBuilder Build 之后执行以下 Aop 统一处理：</p>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MapType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>增删改 BulkCopy</h2>\n<ul>\n<li>主键无值</li>\n</ul>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Department</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">departments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"部门1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">},</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"部门2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">},</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"部门3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">departments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//这行</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteMySqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>Id主键有值时</li>\n</ul>\n<div class=\"language-cs line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cs\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-cs\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">departments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"部门1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">},</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"部门2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">},</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Department</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"部门3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">departments</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteMySqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteSqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//临时表 + MERGE INTO</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">InsertOrUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteSqlBulkCopy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//临时表 + MERGE INTO</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Oracle",
      "url": "https://freesql.net/guide/freesql-provider-oracle.html",
      "id": "https://freesql.net/guide/freesql-provider-oracle.html",
      "summary": "FreeSql 对 Oracle 支持非常友好，是 c#.net ORM 不二之选，提供了 Ado.net/Odbc/Oledb 三种实现包，他们都支持 .NETCore2.1+、.NET4.0+ 等最新或较低的 .NETFramework 版本。 若想以 Ado.net 驱动访问数据库，请安装： dotnet add package FreeSql....",
      "content_html": "<p>FreeSql 对 Oracle 支持非常友好，是 c#.net ORM 不二之选，提供了 Ado.net/Odbc/Oledb 三种实现包，他们都支持 .NETCore2.1+、.NET4.0+ 等最新或较低的 .NETFramework 版本。</p>\n<p>若想以 Ado.net 驱动访问数据库，请安装：</p>\n<blockquote>\n<p>dotnet add package FreeSql.Provider.Oracle</p>\n</blockquote>\n<p>若想以 ODBC 驱动访问数据库，请安装：</p>\n<blockquote>\n<p>dotnet add package FreeSql.Provider.Odbc</p>\n</blockquote>\n<p>若想以 Oledb 驱动访问数据库，请安装：</p>\n<blockquote>\n<p>dotnet add package FreeSql.Provider.OracleOledb</p>\n</blockquote>\n",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "PostgreSQL",
      "url": "https://freesql.net/guide/freesql-provider-postgresql.html",
      "id": "https://freesql.net/guide/freesql-provider-postgresql.html",
      "summary": "nuget 安装：FreeSql.Provider.PostgreSQL 数组、字典 PostgreSQL 数据类型丰富，支持 int[]、string[] 数组类型，Dictionary<string, string> 字典类型。 参考资料：《PostgreSQL Array 数组类型与 FreeSql 打出一套【组合拳】》 JSONB Postgr...",
      "content_html": "<!-- # FreeSql.Provider.PostgreSQL -->\n<p>nuget 安装：FreeSql.Provider.PostgreSQL</p>\n<h2>数组、字典</h2>\n<p>PostgreSQL 数据类型丰富，支持 int[]、string[] 数组类型，Dictionary&lt;string, string&gt; 字典类型。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> model</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[] </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">tagIds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//映射数组</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[] </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">tagNames</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">dict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//映射 hstore</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 支持索引查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">tagIds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ContainsKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>参考资料：<a href=\"https://www.cnblogs.com/FreeSql/p/16351417.html\" target=\"_blank\" rel=\"noopener noreferrer\">《PostgreSQL Array 数组类型与 FreeSql 打出一套【组合拳】》</a></p>\n<h2>JSONB</h2>\n<p>PostgreSQL JSON 类型的查询性能不输 mongodb，适合做动态结构的数据存储场景。</p>\n<p>FreeSql.Provider.PostgreSQL 默认使用 Newtonsoft.Json.Linq 映射 jsonb 类型，如下三种均可：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> model</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> JToken</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> jsonb1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> JObject</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> jsonb2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> JArray</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> jsonb3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 支持索引查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">jsonb1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ContainsKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SQL: WHERE coalesce(a.jsonb1, '{}') ? 'key1'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">jsonb2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ContainsKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SQL: WHERE coalesce(a.jsonb2-&gt;key1, '{}') ? 'key2'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">jsonb2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">JToken</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"{key1:'xxx'}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SQL: WHERE coalesce(a.jsonb2, '{}') @&gt; '{\"key1\":'xxx'}'::jsonb</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">jsonb2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">][</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SQL: WHERE (a.jsonb2-&gt;key1-&gt;key2)::text = 'xxx'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">model</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">jsonb2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">][</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"key2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SQL: WHERE (a.jsonb2-&gt;key1-&gt;key2)::text::int4 &gt; 100</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| lambda 表达式树函数 | PostgreSQL                               | 功能说明               |\n|</p>\n",
      "date_published": "2022-06-24T16:45:08.000Z",
      "date_modified": "2025-03-28T04:00:05.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "基于FreeSql扩展文档",
      "url": "https://freesql.net/extra/",
      "id": "https://freesql.net/extra/",
      "summary": "基于FreeSql扩展文档 更多文档 CentOS8 ARM 下连接 SQL Server 2008 R2（Hypervisor） 一对多关系，分表只取关联的第一条记录，如何获取",
      "content_html": "\n<h2>更多文档</h2>\n<ul>\n<li><a href=\"https://github.com/dotnetcore/FreeSql/issues/601\" target=\"_blank\" rel=\"noopener noreferrer\">CentOS8 ARM 下连接 SQL Server 2008 R2（Hypervisor）</a></li>\n<li><a href=\"https://github.com/dotnetcore/FreeSql/issues/430\" target=\"_blank\" rel=\"noopener noreferrer\">一对多关系，分表只取关联的第一条记录，如何获取</a></li>\n</ul>\n",
      "date_published": "2022-06-23T16:16:24.000Z",
      "date_modified": "2022-08-31T14:37:49.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "多个 IFreeSql 注入使用",
      "url": "https://freesql.net/extra/idlebus-freesql.html",
      "id": "https://freesql.net/extra/idlebus-freesql.html",
      "summary": "多个 IFreeSql 注入使用 多库切换，动态切库，动态注册数据库 一、定义多个 IFreeSql 该方法适用于固定数据库，固定配置项 1、定义两个标识类： 2、在 Startup.cs 中单例注入 3、在 Controller 中使用 二、使用 FreeSql.Cloud 为 FreeSql 提供跨数据库访问，分布式事务TCC、SAGA解决方案，支...",
      "content_html": "\n<p>多库切换，动态切库，动态注册数据库</p>\n<h2>一、定义多个 IFreeSql</h2>\n<p>该方法适用于固定数据库，固定配置项</p>\n<p>1、定义两个标识类：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MySqlFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SqlServerFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、在 Startup.cs 中单例注入</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ConfigureServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceCollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    Func</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MySqlFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"str1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MySqlFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    Func</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlServerFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServer</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"str1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlServerFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    };</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MySqlFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlServerFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>3、在 Controller 中使用</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Route</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"api/[controller]\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ApiController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ValuesController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ControllerBase</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ValuesController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MySqlFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mysql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlServerFlag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">sqlserver</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>二、使用 FreeSql.Cloud</h2>\n<p>为 FreeSql 提供跨数据库访问，分布式事务TCC、SAGA解决方案，支持 .NET Core 2.1+, .NET Framework 4.0+.</p>\n<p>开源地址：https://github.com/2881099/FreeSql.Cloud</p>\n<blockquote>\n<p>dotnet add package FreeSql.Cloud</p>\n</blockquote>\n<p>or</p>\n<blockquote>\n<p>Install-Package FreeSql.Cloud</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> enum</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { db1, db2, db3 }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlCloud</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"myapp\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//提示：泛型可以传入 string</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DistributeTrace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Split</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Trim</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=db1.db\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=db2.db\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=db3.db\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>FreeSqlCloud 必须定义成单例模式</p>\n</blockquote>\n<blockquote>\n<p>new FreeSqlCloud&lt;DbEnum&gt;() 多连接管理</p>\n</blockquote>\n<blockquote>\n<p>new FreeSqlCloud&lt;DbEnum&gt;(\"myapp\") 开启 TCC/SAGA 事务生效</p>\n</blockquote>\n<p>FreeSqlCloud 的访问方式和 IFreeSql 一样：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//...</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>切换数据库：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Change</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//以后所有 fsql.Select/Insert/Update/Delete 操作是 db3</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>自动定向数据库配置：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 fsql.CRUD 方法名 + 实体类型 进行拦截，自动定向到对应的数据库，达到自动 Change 切换数据库目的</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntitySteering</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    switch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MethodName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Select\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">                //查询 T 自动定向 db3</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DBKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            else</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DBKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">                //此处像不像读写分离？</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dbkeyIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Random</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AvailableDBKeys</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Length</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DBKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AvailableDBKeys</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dbkeyIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//重新定向到其他 db</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            break</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Insert\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Update\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Delete\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"InsertOrUpdate\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            break</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>参考</h2>\n<p><a href=\"https://github.com/dotnetcore/FreeSql/issues/44\" target=\"_blank\" rel=\"noopener noreferrer\">多个 IFreeSql 实例，如何注入使用？ · Issue #44 · dotnetcore/FreeSql (github.com)</a></p>\n",
      "date_published": "2022-06-23T16:16:24.000Z",
      "date_modified": "2022-09-21T01:47:09.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "支持我们",
      "url": "https://freesql.net/reference/service-support.html",
      "id": "https://freesql.net/reference/service-support.html",
      "summary": "支持我们 FreeSql 采用 MIT 最宽松的开源协议，永久免费开源。任何公司或个人，都可以使用在任何商业项目中。 QQ 技术群：561616019(在线)、4336577(满员)、8578575(满员)、52508226(满员) 反馈问题请前往 https://github.com/dotnetcore/FreeSql/issues 💕 自愿捐赠...",
      "content_html": "\n<p>FreeSql 采用 MIT 最宽松的开源协议，永久免费开源。任何公司或个人，都可以使用在任何商业项目中。</p>\n<p>QQ 技术群：561616019(在线)、4336577(满员)、8578575(满员)、52508226(满员)</p>\n<p>反馈问题请前往 <a href=\"https://github.com/dotnetcore/FreeSql/issues\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql/issues</a></p>\n<h2>💕 自愿捐赠</h2>\n<blockquote>\n<p>Donate the author to have a cup of coffee</p>\n</blockquote>\n<img src=\"/barcode_2x1.png\" style=\"width:400px;height:255px;\">\n<p>L*y 58 元、花花 88 元、麦兜很乖 50 元、网络来者 2000 元、John 99.99 元、alex 666 元、bacongao 36 元、无名 100 元、Eternity 188 元、无名 10 元、⌒.Helper~..oO 66 元、习惯与被习惯 100 元、无名 100 元、蔡易喋 88.88 元、中讯科技 1000 元、Good Good Work 24 元、炽焰 6.6 元、Nothing 100 元、兰州天擎赵 500 元、哈利路亚 300 元、\n无名 100 元、蛰伏 99.99 元、TCYM 66.66 元、MOTA 5 元、LDZXG 30 元、Near 30 元、建爽 66 元、无名 200 元、LambertWu 100 元、无名 18.88 元、乌龙 50 元、无名 100 元、陳怼怼 66.66 元、陳怼怼 66.66 元、丁淮 100 元、李伟坚-Excel 催化剂 100 元、白狐 6.66 元、她微笑的脸 y 30 元、Eternity²º²¹ 588 元、夜归柴门 88 元、蔡易喋 666.66 元、\n<em>礼 10 元、litrpa 88 元、Alax CHOW 200 元、Daily 66 元、k</em>t 66 元、蓝 100 元、*菜 10 元、生命如歌 1000 元、山鸡 88元、平凡 100元、大树 1000元、软软的毛毛虫 66.66元、问卷星 2000元、与你无关 5000元、看门大爷 1000元，*来 88.88元，*博 500元，*南 88元，*园 500元，WPF机器视觉活动全体成员 2000元</p>\n<h2>🌳 有偿服务</h2>\n<p>| 服务项目               | 描述                                                    | 价格(RMB) | 付款方式     |\n|</p>\n",
      "date_published": "2022-05-25T15:18:32.000Z",
      "date_modified": "2024-09-03T11:29:23.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Sqlite",
      "url": "https://freesql.net/guide/freesql-provider-sqlitecore.html",
      "id": "https://freesql.net/guide/freesql-provider-sqlitecore.html",
      "summary": "Sqlite FreeSql.Provider.SqliteCore是FreeSql基于微软提供的最新的Microsoft.Data.Sqlite.Core驱动的实现。 需要另外安装对应的bundle_xxx实现加密。 支持的版本 .NET Standard 2.0（支持.NET Framework4.6.1+/支持.NET Core 2.0+） ne...",
      "content_html": "\n<p>FreeSql.Provider.SqliteCore是<code>FreeSql</code>基于微软提供的最新的<a href=\"https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/?tabs=netcore-cli\" target=\"_blank\" rel=\"noopener noreferrer\"><code>Microsoft.Data.Sqlite.Core</code></a>驱动的实现。\n<strong>需要另外安装对应的bundle_xxx</strong>实现加密。</p>\n<h2>支持的版本</h2>\n<ul>\n<li>.NET Standard 2.0（支持.NET Framework4.6.1+/支持.NET Core 2.0+）</li>\n<li>net6.0</li>\n<li>SQLite（3.7 及以上版本）</li>\n<li>Linux ARM/X86/MAUI Android/MAUI iOS等</li>\n</ul>\n<p>安装<code>FreeSql.Provider.SqliteCore</code>包。</p>\n<div class=\"language-console line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"console\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-console\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">dotnet add package FreeSql.Provider.SqliteCore</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">dotnet add package SQLitePCLRaw.bundle_e_sqlite3</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p><code>SQLitePCLRaw.bundle_e_sqlite3</code> 不支持加密，但此方式是官方实现的<code>SQlite</code>版本，以下二选一：</p>\n<p>| 捆绑                            | 描述                                                                                  |\n|</p>\n",
      "date_published": "2022-03-25T06:41:57.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "UowManager 事务 ✨",
      "url": "https://freesql.net/guide/unitofwork-manager.html",
      "id": "https://freesql.net/guide/unitofwork-manager.html",
      "summary": "UowManager 事务 ✨ 本篇文章内容引导，如何在 asp.net core 项目中使用特性(注解) 的方式管理事务。 UnitOfWorkManager 只可以管理 Repository 仓储对象的事务 支持六种传播方式(propagation)，跨方法的事务非常方便，支持同步异步： Required：如果当前没有事务，就新建一个事务，如果已存...",
      "content_html": "\n<p>本篇文章内容引导，如何在 asp.net core 项目中使用特性(注解) 的方式管理事务。</p>\n<blockquote>\n<p>UnitOfWorkManager 只可以管理 Repository 仓储对象的事务</p>\n</blockquote>\n<p>支持六种传播方式(propagation)，跨方法的事务非常方便，支持同步异步：</p>\n<ul>\n<li>Required：如果当前没有事务，就新建一个事务，如果已存在一个事务中，加入到这个事务中，默认的选择。</li>\n<li>Supports：支持当前事务，如果没有当前事务，就以非事务方法执行。</li>\n<li>Mandatory：使用当前事务，如果没有当前事务，就抛出异常。</li>\n<li>NotSupported：以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。</li>\n<li>Never：以非事务方式执行操作，如果当前事务存在则抛出异常。</li>\n<li>Nested：以嵌套事务方式执行。</li>\n</ul>\n<p>最终呈现的事务代码如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongService</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">_songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Detail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">_detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> SongService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Detail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Transactional</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Required</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    async</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //所有注入的仓储对象，都是一个事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">        this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Test2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>第一步：依赖注入、中间件</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//依赖注入</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Startup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//以这种方式注入的 IFreeSql 会跟随 UowManager 切换事务，原始 fsql 对象为 static 单例</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//中间件</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Configure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IApplicationBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Use</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">async</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">RequestServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>第二步：引入动态代理库</h2>\n<blockquote>\n<p>肉夹馍：https://github.com/inversionhourglass/Rougamo</p>\n</blockquote>\n<blockquote>\n<p>dotnet add package Rougamo.Fody</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AttributeUsage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AttributeTargets</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Method</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TransactionalAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Rougamo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MoAttribute</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Propagation</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Required</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IsolationLevel</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">m_IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">m_IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">m_IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">m_ServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> SetServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> serviceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">m_ServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> serviceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IUnitOfWork</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnEntry</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MethodContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> m_ServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">m_IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnExit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MethodContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">\tif</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsAssignableFrom</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> is </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            ((</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Task</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ReturnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ContinueWith</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">_OnExit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        else</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> _OnExit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> _OnExit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                else</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                _uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| UnitOfWorkManager 成员                         | 说明                   |\n|</p>\n",
      "date_published": "2021-08-21T05:59:59.000Z",
      "date_modified": "2025-07-11T10:21:27.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "IFreeSql 和 DbContext",
      "url": "https://freesql.net/guide/ifreesql-context.html",
      "id": "https://freesql.net/guide/ifreesql-context.html",
      "summary": "IFreeSql 和 DbContext 两者并存 FreeSql 支持 IFreeSql 和 DbContext 两种形式，使用方法差异也有些大，其中 DbContext 跟 EFCore 使用方式基本一致，使用简单、依赖注入方便。 而 IFreeSql 支持更多细粒度的操作。在 DbContext 中，要删除多个行记录，必须先查询实体后，再使用 R...",
      "content_html": "\n<h2>两者并存</h2>\n<p>FreeSql 支持 IFreeSql 和 DbContext 两种形式，使用方法差异也有些大，其中 DbContext 跟 EFCore 使用方式基本一致，使用简单、依赖注入方便。</p>\n<p>而 IFreeSql 支持更多细粒度的操作。在 DbContext 中，要删除多个行记录，必须先查询实体后，再使用 <code>RemoveRange()</code> 删除这些实体，当数据量非常大的时候，便会消耗大量时间和性能。而 IFreeSql 中，支持嵌入部分 SQL ，支持细粒度的行记录操作。在 IFreeSql 中批量删除、修改记录，可以使用类似 SQL 的模式：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_freesql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Roles</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;  </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrowsAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> roles</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> is_deleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tenant_id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>所以往往将 IFreesql 和 DbContext 并存，在使用时，根据场景使用这两种方式操作数据库。</p>\n<h2>使用方法</h2>\n<p>IFreeSql 的创建需要定义为单例模式，示例如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">connectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//自动同步实体结构到数据库</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//请务必定义成 Singleton 单例模式</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>而 Freesql 也支持了类似 EFCore 的 DbContext 模式。通过引入 <code>FreeSql.DbContext</code> 库，可以使用特性、Fluent api 等配置实体映射、导航属性等，生成类似于 EFCore 的 DbContext 类型，然后通过依赖注入实例化使用。</p>\n<p>通过定义 DbContext ，我们可以根据 EFCore 的使用习惯，快速掌握 FreeSql 的使用，甚至可以直接将 EFCore DbContext 转为 Freesql DbContext，因为 Freesql DbContext 支持了 95% 的 EFCore Fluent api 。</p>\n<p>下面说说如何利用 FreeSql 更加方便地迁移数据库以及定义 DbContext。</p>\n<p>安装 FreeSql 工具：</p>\n<div class=\"language-shell line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"shell\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-shell\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> tool</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> install</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -g</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Generator</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>接着还原数据库表为实体：</p>\n<div class=\"language-shell line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"shell\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-shell\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FreeSql.Generator</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">  -NameOptions</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> 1,1,0,1</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -NameSpace</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> AuthCenter.Database.Entities</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -DB</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"MySql,data source=123.123.123.123;port=3306;user id=root;password=root;initial catalog=datab;charset=utf8;sslmode=none;max pool size=2\"</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -FileName</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"{name}.cs\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>还原的实体示例：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">JsonObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MemberSerialization</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OptIn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"roles\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">DisableSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> partial</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Roles</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">JsonProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">DbType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"bigint unsigned\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> ulong</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 创建时间</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">JsonProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"creation_time\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">DbType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"bigint unsigned\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> ulong</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreationTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>在 FreeSql 中，实体特性优先于 Fluent api，同时 FreeSql 也兼容 EFCore 的实体特性。</p>\n<p>由于 <code>FreeSql.Generator</code> 工具很方便，我们不需要另外使用 Fluent api 去定义复杂的逻辑结构。</p>\n<p>接着定义 DbContext：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">namespace</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> My</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Context</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> partial</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AuthcenterContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbContext</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> iFreesql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> AuthcenterContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> AuthcenterContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> freeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            iFreesql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> freeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DbSet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Roles</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Roles</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        protected</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnConfiguring</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbContextOptionsBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // iFreesql.xxxx</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 使用 iFreesql 调用 Fluent api</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">iFreesql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        protected</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnModelCreating</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ICodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> codefirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>通过这种方法，IFreeSql 和 DbContext 中的实体及其实体特性、Fluent api 等都保持一致。</p>\n</blockquote>\n<p>接着，在依赖注入中，将 IFreeSql 和 DbContext 都注入。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ConfigureServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceCollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"data source=123.123.123.123;port=3306;user id=root;password=root;initial catalog=authcenter;charset=utf8\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeDbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AuthcenterContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>我们在类型中通过依赖注入获取到这两种服务：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> _freesql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> _context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> freeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">MyContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    _freesql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> freeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    _context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>然后就可以快乐地使用 Freesql 了。</p>\n",
      "date_published": "2021-07-14T05:16:31.000Z",
      "date_modified": "2022-09-04T08:51:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "WithSql",
      "url": "https://freesql.net/guide/withsql.html",
      "id": "https://freesql.net/guide/withsql.html",
      "summary": "WithSql WithSql 自定义 SQL 定义实体类 不同的查询方式。 返回DataTable 返回List<Tuplue> 即List<(string,string)>元组 返回List<object> 且能支持分页 返回List<TestClassDto>且能支持分页 1.动态表名 2.返回 DataTable 3.返回 DataTable ...",
      "content_html": "\n<h2>WithSql 自定义 SQL</h2>\n<p>定义实体类</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TestClass</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"ID\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> No</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"BIRTH_DAY\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Birthday</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> decimal</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Point</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Sex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Sex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> enum</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Sex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { Boy, Girl }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TestClssDto</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> ID</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Birthday</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>不同的查询方式。</p>\n<ul>\n<li>返回<code>DataTable</code></li>\n<li>返回<code>List&lt;Tuplue&gt;</code> 即<code>List&lt;(string,string)&gt;</code>元组</li>\n<li>返回<code>List&lt;object&gt;</code> 且能支持分页</li>\n<li>返回<code>List&lt;TestClassDto&gt;</code>且能支持分页</li>\n</ul>\n<h3>1.动态表名</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 TestClass_201903 表查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestClass</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">old</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">old</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>2.返回 DataTable</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DataTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dt1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from TestClass\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToDataTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ID, Age\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ID, Age</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> TestClass ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>3.返回 DataTable</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DataTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dt2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from TestClass\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToDataTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"*\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> TestClass ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>4.返回<code>List&lt;Tuple&gt;</code> 即<code>List&lt;(string,string)&gt;</code> 元组</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> _fsql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from TestClass\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ID, Age\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ID, Age</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> TestClass ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>5.返回<code>List&lt;object&gt;</code></h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from TestClass \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"*\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> TestClass ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>6.返回<code>List&lt;object&gt;</code> 且能支持分页</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from TestClass \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"1=1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ID DESC\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ID,Age\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ID, Age</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> TestClass ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ORDER BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ID </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DESC</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>7.返回<code>List&lt;TestClassDto&gt;</code>且能支持分页</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from TestClass \"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"1=1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ID DESC\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestClssDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ID,Age,BIRTH_DAY as Birthday\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ID,Age,BIRTH_DAY </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">as</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> Birthday</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> TestClass ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ORDER BY</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ID </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DESC</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>通过 WithSql + ToSQL 实现 Union ALL 查询方法</h2>\n<h3>1、二次 ISelect 查询：WithSql 使用多次，等于 UNION ALL 查询</h3>\n<p>WithSql 使用多次为 UNION ALL 查询，所以我们可以利用 ISelect.ToSql(FieldAliasOptions.AsProperty) 得到生成的 SQL，如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyy\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `tb_topic`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LIKE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '%xxx%'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a) ftb</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UNION ALL</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `tb_topic`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LIKE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '%yyy%'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a) ftb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>2、跨分表查询：AsTable 相同实体多次操作，等于 Union ALL 查询</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table_1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table_2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as1 </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"table_1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a) ftb</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as1 </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"table_2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a) ftb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>3、利用 ToSql 拼接新的 SQL，使用 IAdo 执行</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 200</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FieldAliasOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AsProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1001</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1200</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FieldAliasOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AsProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CommandFluent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql1</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">} UNION ALL {</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql2</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteDataTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>分页问题</h2>\n<p>Union All 之后 如果直接 分页会有一个问题。请看具体示例</p>\n<p>多次 WithSql + Page 存在问题：每个 WithSql 内都有一个 Page 分页</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"yyy\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">20</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `tb_topic`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LIKE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '%xxx%'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">20</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ftb</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `tb_topic`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LIKE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '%yyy%'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">20</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) ftb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>多个 sql union all 使用 withsql，直接 Page 分页，会导致每个子表都生效，子表都生成分页。</p>\n<p>WithSql 可以和 AsTable 实现分表的功能。</p>\n<p>分表跨表查询的时候，分页是要向每个子表（即每个 WithSql 中的 SQL 分页）都生效。</p>\n<h3>解决方案</h3>\n<p>多次 withsql ，如需分页，需要按下面的二步操作</p>\n<ul>\n<li>第一步：通过 witsql，将二个 sql 组成一个 sql。</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"SELECT * FROM tb_topic where id &gt; 11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"SELECT * FROM tb_topic where id &lt; 10\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"*\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如上生成的 UOION ALL 的 sql</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> tb_topic </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> id </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) a) ftb</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> tb_topic </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> id </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) a) ftb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>第二步：之后 调用 Page 则是通过 Union ALL 后的结果上分页</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mysql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">     .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">     .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">     .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Clicks`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TypeGuid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> tb_topic </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> id </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) a) ftb</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    UNION ALL</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> *</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ( </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> * </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> tb_topic </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> id </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ) a) ftb ) a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2021-06-16T16:56:09.000Z",
      "date_modified": "2024-10-23T01:07:44.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Awesome FreeSql",
      "url": "https://freesql.net/reference/awesome-freesql.html",
      "id": "https://freesql.net/reference/awesome-freesql.html",
      "summary": "Awesome FreeSql 基于 FreeSql 的仓库项目 FreeSql 官方博客 https://www.cnblogs.com/kellynic/ https://www.cnblogs.com/freesql/ 官方文档 https://freesql.net https://github.com/dotnetcore/FreeSql/w...",
      "content_html": "\n<h2>基于 FreeSql 的仓库项目</h2>\n<div class=\"vp-banner-wrapper\">\n</div>\n<h2>FreeSql 官方博客</h2>\n<ul>\n<li><a href=\"https://www.cnblogs.com/kellynic/\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.cnblogs.com/kellynic/</a></li>\n<li><a href=\"https://www.cnblogs.com/freesql/\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.cnblogs.com/freesql/</a></li>\n</ul>\n<h2>官方文档</h2>\n<ul>\n<li><a href=\"https://freesql.net\" target=\"_blank\" rel=\"noopener noreferrer\">https://freesql.net</a></li>\n<li><a href=\"https://github.com/dotnetcore/FreeSql/wiki\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql/wiki</a></li>\n<li><a href=\"http://124.221.134.143:8082/api/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">API 参考(国内镜像)</a></li>\n<li><a href=\"https://dotnetcore.github.io/FreeSql/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">API 参考</a></li>\n</ul>\n<h2>源码</h2>\n<ul>\n<li>GitHub: <a href=\"https://github.com/dotnetcore/FreeSql\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql</a></li>\n<li>Gitee: <a href=\"https://gitee.com/FreeSql/FreeSql-ORM\" target=\"_blank\" rel=\"noopener noreferrer\">https://gitee.com/FreeSql/FreeSql-ORM</a></li>\n</ul>\n",
      "date_published": "2021-02-09T12:13:50.000Z",
      "date_modified": "2025-03-20T05:53:18.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "特别鸣谢",
      "url": "https://freesql.net/reference/donation.html",
      "id": "https://freesql.net/reference/donation.html",
      "summary": "特别鸣谢 🌟 我们由衷感谢 OhOhMan 为本项目提供的服务器支持！ OhOhMan 开源社区的慷慨助力为项目的稳定运行注入强大动力，特此深表感谢！",
      "content_html": "\n<p>| 捐赠者              | 金额      | 时间       |\n|</p>\n",
      "date_published": "2021-02-09T12:13:50.000Z",
      "date_modified": "2025-03-27T09:05:19.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "ADO",
      "url": "https://freesql.net/guide/ado.html",
      "id": "https://freesql.net/guide/ado.html",
      "summary": "ADO Ado 是 IFreeSql 下重要的对象之一，它包括所有对 SQL 操作的封装，提供 ExecuteReader、ExecuteDataSet、ExecuteDataTable、ExecuteNonQuery、ExecuteScalar 等方法，使用起来和传统 SqlHelper 一样。 查询 SQL 返回实体 参数化 Ado 下面所有参数 ...",
      "content_html": "\n<p>Ado 是 IFreeSql 下重要的对象之一，它包括所有对 SQL 操作的封装，提供 ExecuteReader、ExecuteDataSet、ExecuteDataTable、ExecuteNonQuery、ExecuteScalar 等方法，使用起来和传统 SqlHelper 一样。</p>\n<h2>查询 SQL 返回实体</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回多条记录</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from t1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回单条记录</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">QuerySingle</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from t1 where id = @id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回多个结果集</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from t1; select * from t2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//like 查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> searchText</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"abc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from t1 where name like @name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"%\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> searchText</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"%\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//获取数据库时间</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT now(), utc_timestamp()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">QuerySingle</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(() =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UtcNow</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>参数化</h2>\n<p>Ado 下面所有参数 object parms 都可以接受匿名对象，或者字典：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> new</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> new</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>参数前缀</h2>\n<ul>\n<li>odbc 是 <strong>?</strong> 并且没有标识，所以 freesql 禁用了 odbc 参数化</li>\n</ul>\n<p>| 类型           | 前缀符号 |\n|</p>\n",
      "date_published": "2021-02-06T16:18:46.000Z",
      "date_modified": "2024-08-03T07:06:40.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "表达式函数",
      "url": "https://freesql.net/guide/expression-function.html",
      "id": "https://freesql.net/guide/expression-function.html",
      "summary": "表达式函数 这是 FreeSql 非常特色的功能之一，请别错过文档的细节，可映射的类型基本都可以使用对应的表达式函数，例如 日期、字符串、IN 查询、数组（PostgreSQL 数组）、字典（PostgreSQL HStore）等等。 SqlExt.xxx 是 FreeSql 默认提供常见的自定义函数，详细见开窗函数。 Lambda接拼 单表 多表 I...",
      "content_html": "\n<p>这是 <code>FreeSql</code> 非常特色的功能之一，请别错过文档的细节，可映射的类型基本都可以使用对应的表达式函数，例如 日期、字符串、<code>IN</code> 查询、数组（PostgreSQL 数组）、字典（PostgreSQL HStore）等等。</p>\n<p>SqlExt.xxx 是 FreeSql 默认提供常见的自定义函数，详细见<a href=\"#%E5%BC%80%E7%AA%97%E5%87%BD%E6%95%B0\">开窗函数</a>。</p>\n<h2>Lambda接拼</h2>\n<ul>\n<li>单表</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Expression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Func</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">And</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">num</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Or</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">num</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>多表</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Expression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Func</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">HzyTuple</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Or</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>In查询</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new[] { </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT .. FROM ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (a.`Id` in (1,2,3))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>已优化，防止 where in 元素多过的 SQL 错误，如：</p>\n</blockquote>\n<blockquote>\n<p>[Err] ORA-01795: maximum number of expressions in a list a 1000</p>\n</blockquote>\n<p>原来：where id in (1..1333)</p>\n<p>现在：where id in (1..500) or id in (501..1000) or id in (1001..1333)</p>\n<h2>In多列查询</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//元组集合</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">vae</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">NewGuid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">lst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ct1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT .. FROM ..</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (a.\"Id\" = '685ee1f6-bdf6-4719-a291-c709b8a1378f' AND a.\"ct1\" = '2019-12-07 23:55:27' OR</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//a.\"Id\" = '5ecd838a-06a0-4c81-be43-1e77633b7404' AND a.\"ct1\" = '2019-12-07 23:55:27')</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>v3.2.650 使用 .Where(a =&gt; list.Any(b =&gt; b.Item1 == a. Id &amp;&amp; b.Item2 == a. ct1))</p>\n</blockquote>\n<blockquote>\n<p>WHERE (id, code) in ((1,'code1'), (2,'code2')) 实现代码：<a href=\"/extra/issues-in-valuetype.html\" target=\"_blank\">In多列查询，表达式自定义实现</a></p>\n</blockquote>\n<h2>In子表</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">As</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"b\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (((a.`Id`) in (SELECT b.`Id`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    FROM `Topic` b)))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>Exists子表</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">As</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"b\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (exists(SELECT 1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    FROM `Topic` b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    WHERE (b.`Id` = a.`Id`)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    limit 0,1))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：由于子查询的实体类与上层相同，使用 As(\"b\") 指明别名，以便区分</p>\n</blockquote>\n<h2>查找今天创建的数据</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Date</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Today</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//这行代码说明 FreeSql 表达式解析强大，不是所有 ORM 都支持</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Between</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Today</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Today</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddDays</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//正常用法应该是这样</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Subtract</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Today</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TotalDays</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE datediff(day, date1, date2) = 0</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>SqlServer nvarchar/varchar 已兼容表达式解析，分别解析为：N'' 和 ''，优化索引执行计划；</p>\n</blockquote>\n<h2>日期格式化</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"HH:mm:ss\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// SELECT date_format(a.`CreateTime`, '%H:%i:%s') as1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// FROM `xxx` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// limit 0,1</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>v1.5.0 支持了常用 c# 日期格式化，yyyy MM dd HH mm ss yy M d H hh h m s tt t</p>\n</blockquote>\n<blockquote>\n<p>tt t 为 AM PM</p>\n</blockquote>\n<h2>开窗函数</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    EdiId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    over1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> SqlExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Rank</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Over</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderByDescending</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EdiId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>v1.6.0 利用<a href=\"#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A7%A3%E6%9E%90\">自定义解析</a>功能，增加 SqlExt.Rank().Over().PartitionBy(...)、MySql group_concat 常用函数，欢迎 PR 补充</p>\n</blockquote>\n<p>FreeSql 默认集成了 SqlExt.cs 扩展解析方法：</p>\n<p>| lambda                                              | sql                                                | 说明           |\n|</p>\n",
      "image": "https://user-images.githubusercontent.com/16286519/69433211-2c5fcf80-0d76-11ea-8eec-963eb37199c5.png",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-09-05T10:20:51.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "分页查询",
      "url": "https://freesql.net/guide/paging.html",
      "id": "https://freesql.net/guide/paging.html",
      "summary": "分页查询 每页 20 条数据，查询第 1 页 Count(out var total) 是同步方法，原因是 out 不支持异步，如果介意可以单独执行如下： 提示：数据量大一般不建议查 Count/CountAsync，而应该采用流式分页（上一页、下一页、不返回总数量） BasePagingInfo 拥有 PageNumber,PageSize,Coun...",
      "content_html": "\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>每页 20 条数据，查询第 1 页</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">out</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> total</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//总记录数量</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">20</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>Count(out var total) 是同步方法，原因是 out 不支持异步，如果介意可以单独执行如下：</p>\n</blockquote>\n<p>提示：数据量大一般不建议查 Count/CountAsync，而应该采用流式分页（上一页、下一页、不返回总数量）</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> total</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CountAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">20</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToListAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p><code>BasePagingInfo</code> 拥有 <code>PageNumber</code>,<code>PageSize</code>,<code>Count</code>，如下内容 <code>.Page(page)</code>，<code>page.Count</code> 就有统计值了</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TopicGetListInput</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BasePagingInfo</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">!</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsNullOrEmpty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderByDescending</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToListAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>优化</h2>\n<p>SqlServer 2012 以前的版本，使用 row_number 分页；</p>\n<p>SqlServer 2012+ 版本，使用最新的 fetch next rows 分页；</p>\n<h2>API</h2>\n<p>| 方法        | 返回值     | 参数                                                    | 描述                                                                                                                  |\n|</p>\n",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "分组聚合",
      "url": "https://freesql.net/guide/select-group-by.html",
      "id": "https://freesql.net/guide/select-group-by.html",
      "summary": "分组聚合 1、单表分组 注意：v3.5.108 GroupBySelf 返回 ISelect 而非 ISelectGrouping 不分组求聚合值，请使用 ToAggregate 替代 ToList 2、多表分组 g.Value.Item1 对应 Topic g.Value.Item2 对应 Category g.Value.Item3 对应 Area...",
      "content_html": "\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>1、单表分组</h2>\n<blockquote>\n<p>注意：v3.5.108 GroupBySelf 返回 ISelect 而非 ISelectGrouping</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tt2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Substring</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">mod4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> %</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Having</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mod4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mod4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Having</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 300</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">mod4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">tt2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderByDescending</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        cou1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        arg1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        arg2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ? </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//substr(a.`Title`, 1, 2) as1,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//(a.`Id` % 4) as2,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//count(1) as3,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//avg(a.`Clicks`) as4,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//sum(case when a.`Clicks` &gt; 100 then 1 else 0 end) as5</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//GROUP BY substr(a.`Title`, 1, 2), (a.`Id` % 4)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//HAVING (count(1) &gt; 0 AND avg((a.`Id` % 4)) &gt; 0 AND max((a.`Id` % 4)) &gt; 0) AND (count(1) &lt; 300 OR avg((a.`Id` % 4)) &lt; 100)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//ORDER BY substr(a.`Title`, 1, 2), count(1) DESC</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>不分组求聚合值，请使用 ToAggregate 替代 ToList</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToAggregate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        cou1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        arg1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        arg2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ? </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>2、多表分组</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AreaId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Having</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 300</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT count(1), c.name</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM topic a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//LEFT JOIN cagetory b ON b.id = a.category_id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//LEFT JOIN area c ON c.id = b.area_id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//GROUP BY a.title, c.name</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//HAVING count(1) &lt; 300 AND avg(a.clicks) &lt; 100</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>g.Value.Item1 对应 Topic</li>\n<li>g.Value.Item2 对应 Category</li>\n<li>g.Value.Item3 对应 Area</li>\n</ul>\n<p>| 说明   | 方法               | SQL                          |\n|</p>\n",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-03-18T03:12:18.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "查询",
      "url": "https://freesql.net/guide/select.html",
      "id": "https://freesql.net/guide/select.html",
      "summary": "查询 FreeSql 在查询数据下足了功夫，链式风格、多表查询、表达式函数、导航属性支持得非常到位。 表达式函数 更详细请前往 SqlServer WithLock/WithIndex 多表： 全局设置 NoLock： 动态过滤 WhereDynamicFilter 《高效理解 FreeSql WhereDynamicFilter，深入了解设计初衷》 ...",
      "content_html": "\n<p>FreeSql 在查询数据下足了功夫，链式风格、多表查询、表达式函数、导航属性支持得非常到位。</p>\n<p>|                                        |                                          |                                         |\n|</p>\n",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-10-22T05:29:03.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "类型映射",
      "url": "https://freesql.net/guide/type-mapping.html",
      "id": "https://freesql.net/guide/type-mapping.html",
      "summary": "类型映射 类型映射（默认） 提示：因排版问题，不显示所有支持的数据库 string 指定长度 [Column(DbType = \"varchar(max)\")] 或者 [MaxLength(-1)] 或者 [Column(StringLength = -1)]，当长度 -1 时产生的映射如下： 注意：MySql [MaxLength(-2)] 或者 [...",
      "content_html": "\n<h2>类型映射（默认）</h2>\n<blockquote>\n<p>提示：因排版问题，不显示所有支持的数据库</p>\n</blockquote>\n<p>| csharp                            | MySql                | SqlServer        | PostgreSQL    | Oracle                            | Sqlite        | 达梦           |\n|</p>\n",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "API 文档",
      "url": "https://freesql.net/reference/api.html",
      "id": "https://freesql.net/reference/api.html",
      "summary": "API 文档 FreeSqlBuilder IFreeSql BaseRepository<TEntity, TKey> 状态管理，可实现 Update 只更新变化的字段（不更新所有字段），灵活使用 Attach 和 Update 用起来非常舒服。 DbContext 与 BaseRepository 功能大致类似。 DbContext 自身 = 完整...",
      "content_html": "\n<h2>FreeSqlBuilder</h2>\n<p>| 方法                                  | 返回值        | 说明                                                                                          |\n|</p>\n",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-06-30T03:09:19.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "与 Dapper 比较",
      "url": "https://freesql.net/reference/vs-dapper.html",
      "id": "https://freesql.net/reference/vs-dapper.html",
      "summary": "与 Dapper 比较 众所周知 Dapper 是 .NET 下最轻最快的 ORM，它是喜欢写 SQL 码农的福音，相对于 SqlHelper 它更加方便，据统计 10 个 .NETer 有 9 个 用过 Dapper。 这篇文章为准备使用 FreeSql 的朋友解惑，对比 Dapper 有何优势，为什么要使用 FreeSql？希望本文内容对大家有所帮...",
      "content_html": "\n<p>众所周知 Dapper 是 .NET 下最轻最快的 ORM，它是喜欢写 SQL 码农的福音，相对于 SqlHelper 它更加方便，据统计 10 个 .NETer 有 9 个 用过 Dapper。</p>\n<p>这篇文章为准备使用 FreeSql 的朋友解惑，对比 Dapper 有何优势，为什么要使用 FreeSql？希望本文内容对大家有所帮助。</p>\n<h2>关于性能（输了）</h2>\n<p>Dapper + SQL 是大家一般所用的方式，性能对比主要体现在两个阶段：</p>\n<p>1、执行前，表达式树解析，拼接 SQL 的消耗：</p>\n<ul>\n<li>Dapper 几乎没有消耗；</li>\n<li>FreeSql 会存在递归解析、对象拆箱等操作；</li>\n</ul>\n<p>从项目工程可维护性角度看，这一点性能损失是能被容忍的，请看下面的测试结果。</p>\n<p>2、执行后，返回数据转换为 List：</p>\n<ul>\n<li>Dapper 采用 Emit 构造委托并缓存，性能接近原生代码；</li>\n<li>FreeSql 采用 ExpressionTree 构造委托并缓存，为了映射类型更加易用使用了一点装箱操作，性能比 Dapper 略低；</li>\n</ul>\n<div class=\"language-shell line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"shell\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-shell\"><span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">BenchmarkDotNet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">v0.12.1,</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> OS</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Windows</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> 10.0.19044</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Intel</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Core</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> i7-8700K</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> CPU</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> 3.70GHz</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (Coffee </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Lake</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), 1 CPU, 12 logical and 6 physical cores</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">.NET</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Core</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> SDK=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">6.0.100</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  [Host]     </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">:</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> .NET</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Core</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 5.0.11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (CoreCLR </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">5.0.1121.47308,</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> CoreFX</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 5.0.1121.47308</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), X64 RyuJIT DEBUG</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">  Job-LEQVAV</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> :</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> .NET</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> Core</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 5.0.11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (CoreCLR </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">5.0.1121.47308,</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> CoreFX</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 5.0.1121.47308</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), X64 RyuJIT DEBUG</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">BuildConfiguration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Debug</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  InvocationCount</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">1</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  UnrollFactor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">1</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| Method         | size |       Mean |    Error |    StdDev |     Median | Rank |\n|</p>\n",
      "date_published": "2021-02-04T16:03:18.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "前言",
      "url": "https://freesql.net/guide/BaseEntity.html",
      "id": "https://freesql.net/guide/BaseEntity.html",
      "summary": "前言 尝试过 ado.net、dapper、ef，以及 Repository 仓储，甚至自己还写过生成器工具，以便做常规 CRUD 操作。 它们日常操作不方便之处： 每次使用前需要声明，再操作； 很多人一个实体类，对应一个操作类（或 DAL、DbContext、Repository）； 本文介绍 BaseEntity 一种极简约的 CRUD 操作方法。...",
      "content_html": "\n<p>尝试过 ado.net、dapper、ef，以及 Repository 仓储，甚至自己还写过生成器工具，以便做常规 CRUD 操作。</p>\n<p>它们日常操作不方便之处：</p>\n<ul>\n<li>\n<p>每次使用前需要声明，再操作；</p>\n</li>\n<li>\n<p>很多人一个实体类，对应一个操作类（或 DAL、DbContext、Repository）；</p>\n</li>\n</ul>\n<p>本文介绍 BaseEntity 一种极简约的 CRUD 操作方法。</p>\n<h2>功能特点</h2>\n<ul>\n<li>\n<p>自动迁移实体结构（CodeFirst），到数据库；</p>\n</li>\n<li>\n<p>直接操作实体的方法，进行 CRUD 操作；</p>\n</li>\n<li>\n<p>简化用户定义实体类型，省去主键、常用字段的配置（如 CreateTime、UpdateTime）；</p>\n</li>\n<li>\n<p>实现单表、多表查询的软删除逻辑；</p>\n</li>\n</ul>\n<h2>声明</h2>\n<p>参考 BaseEntity.cs 源码（约 100 行），copy 到项目中使用，然后添加 nuget 引用包：</p>\n<blockquote>\n<p>dotnet add package FreeSql.DbContext</p>\n</blockquote>\n<blockquote>\n<p>dotnet add package FreeSql.Provider.Sqlite</p>\n</blockquote>\n<p>1、定义一个主键 int 并且自增的实体类型，BaseEntity TKey 指定为 int/long 时，会认为主键是自增；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如果不想主键是自增键，可以重写属性：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>有关更多实体的特性配置，可参阅 <a href=\"/guide/entity-attribute.html\" target=\"_blank\">实体属性</a></p>\n</blockquote>\n<p>2、定义一个主键 Guid 的实体类型，保存数据时会自动产生有序不重复的 Guid 值（不用自己指定 Guid.NewGuid()）；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> UserName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>3、定义多主键的实体类型，可以在 static 构造函数中重写字段名；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Guid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    static</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> User2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        User2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PkId1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"UserId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            t</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PkId2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Index\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>CRUD 使用</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//添加</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"组一\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//更新</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"组二\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//添加或更新</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Save</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//软删除</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//恢复软删除</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Restore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//根据主键获取对象</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Find</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//查询数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>实体类型.Select 是一个查询对象，使用方法和 FreeSql.ISelect 一样；</p>\n<p>支持多表查询时，软删除条件会附加在每个表中；</p>\n<blockquote>\n<p>有关更多查询方法，可参阅 <a href=\"/guide/select.html\" target=\"_blank\">查询</a></p>\n</blockquote>\n<p>示范项目：<a href=\"https://github.com/dotnetcore/FreeSql/tree/master/Examples/base_entity\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql/tree/master/Examples/base_entity</a></p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2024-07-26T14:40:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "入门",
      "url": "https://freesql.net/guide/",
      "id": "https://freesql.net/guide/",
      "summary": "入门 FreeSql 是一款功能强大的对象关系映射（O/RM）组件，支持 .NET Core 2.1+、.NET Framework 4.0+ QQ 群：561616019(在线)、4336577(已满)、8578575(已满)、52508226(已满) 反馈问题请前往 https://github.com/dotnetcore/FreeSql/iss...",
      "content_html": "\n<p>FreeSql 是一款功能强大的对象关系映射（O/RM）组件，支持 .NET Core 2.1+、.NET Framework 4.0+</p>\n<p>QQ 群：561616019(在线)、4336577(已满)、8578575(已满)、52508226(已满)</p>\n<p>反馈问题请前往 <a href=\"https://github.com/dotnetcore/FreeSql/issues\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql/issues</a></p>\n<h2>安装包</h2>\n<p>需要访问什么数据库，就安装对应的 <code>FreeSql.Provider.XX</code>，也可直接安装 <code>FreeSql.All</code></p>\n\n<p>| Package Name                                                          | 说明                                                                                                                                                                   |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-02-10T13:19:41.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "AOP✨",
      "url": "https://freesql.net/guide/aop.html",
      "id": "https://freesql.net/guide/aop.html",
      "summary": "AOP✨ FreeSql AOP 已有的功能介绍，未来为会根据用户需求不断增强。 审计命令(如何监视 SQL？) 如果因为某个 sql 骚操作耗时很高，没有一个相关的审计功能，排查起来可以说无从下手 fsql.Aop.CommandBefore、fsql.Aop.CommandAfter 这两个事件触发所有 SQL 命令的执行前、和执行后。 执行后的事...",
      "content_html": "\n<p>FreeSql AOP 已有的功能介绍，未来为会根据用户需求不断增强。</p>\n<h2>审计命令(如何监视 SQL？)</h2>\n<p>如果因为某个 sql 骚操作耗时很高，没有一个相关的审计功能，排查起来可以说无从下手</p>\n<p>fsql.Aop.CommandBefore、fsql.Aop.CommandAfter 这两个事件触发所有 SQL 命令的执行前、和执行后。</p>\n<p>执行后的事件会附带异常信息、耗时信息等。</p>\n<p>建议在开发模式下开启无参数化模式，new FreeSqlBuilder().UseNoneCommandParameter(true)。</p>\n<blockquote>\n<p>提示：new FreeSqlBuilder().UseMonitorCommand 也可以审计命令执行前后。</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandBefore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //e.Command.CommandText = null; 可拦截命令</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandAfter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //做一些日志记录的操作。以下为示例。</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Trace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Message:{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Message</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> }</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\r\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">StackTrace:{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StackTrace</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\r\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">CommandText:{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Command</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>审计属性值</h2>\n<p>实现插入/更新时统一处理某些值，比如某属性的雪花算法值、创建时间值、甚至是业务值。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CsType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">long</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&amp;&amp;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetCustomAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SnowflakeAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">!=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"0\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Snowflake</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Snowflake</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>当属性的类型是 long，并且标记了 [Snowflake]，并且当前值是 0，那么在插入/更新时它的值将设置为雪花 id 值。</p>\n<blockquote>\n<p>说明：SnowflakeAttribute 是使用者您来定义，new Snowflake().GetId() 也是由使用者您来实现</p>\n</blockquote>\n<p>如果命名规范，可以在 aop 里判断，<code>if (e.Property.Name == \"createtime\") e.Value = DateTime.Now;</code></p>\n<blockquote>\n<p>v3.2.666 可设置 e.ObjectAuditBreak = true 中断对象审计，变相实现每个对象只触发一次 AuditValue 事件</p>\n</blockquote>\n<h2>审计迁移脚本</h2>\n<p>FreeSql 自带迁移功能，那么迁移的 SQL 语句长啥样，你可能会好奇。</p>\n<ul>\n<li>\n<p>比如创建表时；</p>\n</li>\n<li>\n<p>比如添加字段时；</p>\n</li>\n<li>\n<p>比如修改表名、修改字段名时；</p>\n</li>\n<li>\n<p>又比如字段类型更改之后时；</p>\n</li>\n</ul>\n<p>这些操作在 FreeSql.CodeFirst 实现下基本不需要理会，而且我们只推荐在开发环境使用自动迁移的功能，正式环境可使用其他工具替代此操作。</p>\n<p>但我们仍然可能需要对项目做完整的日志记录。</p>\n<p>fsql.Aop.SyncStructureBefore、fsql.Aop.SyncStructureAfter 这两个事件将排上用场。</p>\n<h2>ConfigEntity</h2>\n<h3>统一设置架构名</h3>\n<p>提前设置 FreeSqlBuilder AOP 优先级：</p>\n<p>UseMappingPriority(MappingPriorityType.Attribute, MappingPriorityType.FluentApi, MappingPriorityType.Aop)</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"public.\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //提示：可以利用 AsyncLocal 动态设置表名 v3.2.833</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>MySql Enum 映射</h3>\n<p>默认情况 c# 枚举会映射为 MySql Enum 类型，如果想映射为 int 在 FreeSqlBuilder Build 之后执行以下 Aop 统一处理：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MapType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>修改 decimal 默认特性</h3>\n<p>因为默认 decimal 只支持 decimal(10,2)，范围太小，我们可以全局修改 decimal 类型的支持范围，比如支持 decimal(18,6)</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">decimal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">decimal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">       e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Precision</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 18</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">       e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Scale</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>字典表应用</h3>\n<p>利用 全局过滤器 + Aop 实现如下效果：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MapTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SysParam</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SysParam</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"001\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Param001</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Value2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Value3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Param001</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT Value2, Value3 FROM SysParam WHERE Value = '001'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SysParam</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Value2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Value3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>实现参考：https://github.com/dotnetcore/FreeSql/issues/1997</p>\n<h3>自定义实体特性</h3>\n<p>比如项目内已经使用了其它 orm，如 efcore，这样意味着实体中可能存在 [Key]，但它与 FreeSql [Column(IsPrimary = true] 不同。</p>\n<p>Q： FreeSql 实体特性为啥这么别扭？</p>\n<p>A： 为了考虑一致性用法，全部封装在 ColumnAttribute 下，这样用户使用起来，不用到处 using 或者 回忆特性应该用哪个名字，如自增 [Column(IsIdentity = true)] 即可。</p>\n<p>FreeSql 提供 AOP 自定义特性功能，实现与多个 orm 共同拥有一套实体特性，可避免重复定义特性。</p>\n<blockquote>\n<p>v1.4.0+ 已自动识别 EFCore 实体特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetCustomAttributes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstOrDefault</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() as </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//表名</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetCustomAttributes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstOrDefault</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() as </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//字段名</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> YourEntity</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyColumn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> pkid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Attribute</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">      this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Attribute</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">      this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>Ado .net 读取拦截</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditDataReader</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataReader</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetFieldType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Index</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&amp;&amp;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DBNull</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>表达式拦截</h2>\n<p>FreeSql 内部表达式支持非常丰富，对各大数据库的兼容度也做得很好。</p>\n<blockquote>\n<p>有关表达式支持的程度，可参阅：<a href=\"/guide/expression-function.html\" target=\"_blank\">表达式函数</a></p>\n</blockquote>\n<p>即便如此丰富，也仍然无法满足用户需求，FreeSql 对外开放了自定义表达式解析接口：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParseExpression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Expression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">NodeType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Call</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Expression</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"get_Item\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Result</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"1111\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>这个解析有点复杂，当 <code>e.Expression</code> 很复杂的时候，我们还提供了 <code>e.FreeParse</code> 方法，使用它相当于调用 <code>FreeSql</code> 内置表达式解析引擎，辅助您进行解析。</p>\n<h2>自定义全局类型转换</h2>\n<p>框架中，除基础类型以外可以使用 <code>TypeHandlers</code> 添加转换器，一个具体的类对应一个转换器。</p>\n<p>现在假定你有个BT需求：把数据库中的 <code>'A10'</code> 转换成 枚举的 TestType.A(int值10)</p>\n<ul>\n<li>在 EF 中，框架遍历所有实体，在ctx创建时根据具体的 Enum 类型添加转换器。</li>\n<li>在 FreeSql 中，思路类似。ConfigEntityProperty 委托中可以获取到属性的类型，然后创建一个具体的转换器即可。</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//配置代码</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">freeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">        EnumToValueStringHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> hander</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">EnumToValueStringHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Internal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Utils</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TypeHandlers</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">TryAdd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">hander</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModelType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">hander</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//转换器代码</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EnumToValueStringHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ITypeHandler</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //ModelType这里使用 ModelType 来表达最后Handler针对那个Type进行处理</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    private</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Type</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> enumType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    Type</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ITypeHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">enumType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Type</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> ModelType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">enumType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //构造函数上传递具体的 type 信息，就能针对具体的枚举执行转换了</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //你也可以根据你的需要替换为另一个Type类</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> EnumToValueStringHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> enumType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">        this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">enumType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> enumType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    // xxEnum -&gt; string 附加A</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    object</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ITypeHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Serialize</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"A\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ((</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"D\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    // string -&gt; xxEnum 去掉A</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    object</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ITypeHandler</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Deserialize</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Enum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(((</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Replace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"A\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>核心思路是 <code>ITypeHandler.Type</code> 变成变量，可以从外部传递。额外有些问题要注意：</p>\n<ol>\n<li>所有的 \"xxxEnum\" 都会执行这个转换，如果有多个数据库多种格式，需要在 <code>Handler</code> 中处理</li>\n<li>实体类超级多，枚举属性超级多时，<strong>可能影响性能</strong> 。确实很多时建议不在实体类上修改，可以通过部分类(partial class)，新加一个属性去处理。(属性设置为Ignore,在getter、setter中执行转换)</li>\n</ol>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-03-13T01:12:30.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "级联保存",
      "url": "https://freesql.net/guide/cascade-saving.html",
      "id": "https://freesql.net/guide/cascade-saving.html",
      "summary": "级联保存 接下来的内容，严重依赖的正确配置，请先学会再继续向下！ Topic：文章表 Category：分类表 Comment：评论表 Tag：标签表 ManyToOne（多对一）：Topic（多个）关联 Category（一个）； OneToOne（一对一）：Topic（一个）关联 Content（一个）； OneToMany（一对多：Topic（一...",
      "content_html": "\n<p>接下来的内容，严重依赖<a href=\"/guide/navigate-attribute.html\" target=\"_blank\">【导航属性】</a>的正确配置，请先学会再继续向下！</p>\n<ul>\n<li>Topic：文章表</li>\n<li>Category：分类表</li>\n<li>Comment：评论表</li>\n<li>Tag：标签表</li>\n<li>ManyToOne（多对一）：Topic（多个）关联 Category（一个）；</li>\n<li>OneToOne（一对一）：Topic（一个）关联 Content（一个）；</li>\n<li>OneToMany（一对多：Topic（一个）关联 Comment（多个）；</li>\n<li>ManyToMany（多对多）：Topic（多个）关联 Tag（多个）；</li>\n</ul>\n<p>ManyToOne（多对一）不适合做级联保存，保存 Topic 的时候把 Category 也保存，显然不合理（思考原因），自下向上保存的功能太不可控了。因此下面只讲 OneToOne/OneToMany/ManyToMany 级联保存。</p>\n<blockquote>\n<p>若以上内容不能理解，请多看几遍！</p>\n</blockquote>\n<h2>开启功能</h2>\n\n<blockquote>\n<p>本功能 2019 年实现的（稳定），可移步了解 2022 年新发布的<a href=\"/guide/aggregateroot.html\" target=\"_blank\">《聚合根仓储》</a>（级联更自动）</p>\n</blockquote>\n<p>仓储默认关闭了级联功能，需要手工开启：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EnableCascadeSave</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>机制规则</h2>\n<p>1、OneToOne 级联保存</p>\n<blockquote>\n<p>v3.2.606+ 支持，并且支持<a href=\"/guide/delete.html#ibaserepository-%E7%BA%A7%E8%81%94%E5%88%A0%E9%99%A4\" target=\"_blank\">级联删除功能</a></p>\n</blockquote>\n<p>2、OneToMany 追加或更新子表，不删除子表已存在的数据</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><ul>\n<li>不删除 Comment 子表已存在的数据</li>\n<li>当 topic.Comments 属性为 Empty 时，不做任何操作</li>\n<li>保存 topic.Comments 的时候，还会保存 topic.Comments[0-..] 的下级集合属性，向下 18 层</li>\n</ul>\n<blockquote>\n<p>向下 18 层的意思，比如【文章】表，下面有集合属性【评论】，【评论】下面有集合属性【子评论】。</p>\n</blockquote>\n<blockquote>\n<p>保存【文章】表对象的时候，他会向下检索出集合属性【评论】，然后如果【评论】被保存的时候，再继续向下检索出集合属性【子评论】。一起做 InsertOrUpdate 操作。</p>\n</blockquote>\n<p>3、ManyToMany 完整对比保存中间表，外部表只追加不更新</p>\n<p>完整对比保存中间表，对比【多对多】中间表已存在的数据，计算出添加、修改、删除执行。</p>\n<h2>示例</h2>\n<p>测试 1：追加保存 OneToMany</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Cagetory</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Guid</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Guid</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> TestOneToManyParent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EnableCascadeSave</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类1_1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类1_2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类1_3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类2_1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类2_2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //执行创建表，和插入数据：</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //INSERT INTO \"Cagetory\"(\"Id\", \"Name\", \"ParentId\") VALUES('5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f', '分类1', '00000000-0000-0000-0000-000000000000'), ('5d90afcb-ed57-f6f4-0082-cb6c5b531b3e', '分类2', '00000000-0000-0000-0000-000000000000')</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //INSERT INTO \"Cagetory\"(\"Id\", \"Name\", \"ParentId\") VALUES('5d90afcb-ed57-f6f4-0082-cb6d0c1c5f1a', '分类1_1', '5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f'), ('5d90afcb-ed57-f6f4-0082-cb6e74bd8eef', '分类1_2', '5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f'), ('5d90afcb-ed57-f6f4-0082-cb6f6267cc5f', '分类1_3', '5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f'), ('5d90afcb-ed57-f6f4-0082-cb7057c41d46', '分类2_1', '5d90afcb-ed57-f6f4-0082-cb6c5b531b3e'), ('5d90afcb-ed57-f6f4-0082-cb7156e0375e', '分类2_2', '5d90afcb-ed57-f6f4-0082-cb6c5b531b3e')</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Clear</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类22\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Clear</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //UPDATE \"Cagetory\" SET \"Name\" = CASE \"Id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //WHEN '5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f' THEN '分类11'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //WHEN '5d90afcb-ed57-f6f4-0082-cb6c5b531b3e' THEN '分类22' END</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //WHERE (\"Id\" IN ('5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f','5d90afcb-ed57-f6f4-0082-cb6c5b531b3e'))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //Childs.Clear 后没有执行删除子集合操作，说明没有做完整的对比</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类111\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Clear</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类1_33\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类222\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Clear</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Cagetory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"分类2_22\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">cts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //UPDATE \"Cagetory\" SET \"Name\" = CASE \"Id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //WHEN '5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f' THEN '分类111'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //WHEN '5d90afcb-ed57-f6f4-0082-cb6c5b531b3e' THEN '分类222' END</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //WHERE (\"Id\" IN ('5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f','5d90afcb-ed57-f6f4-0082-cb6c5b531b3e'))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //INSERT INTO \"Cagetory\"(\"Id\", \"Name\", \"ParentId\") VALUES('5d90afe8-ed57-f6f4-0082-cb725df546ea', '分类1_33', '5d90afcb-ed57-f6f4-0082-cb6b78eaaf9f'), ('5d90afe8-ed57-f6f4-0082-cb7338a6214c', '分类2_22', '5d90afcb-ed57-f6f4-0082-cb6c5b531b3e')</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2024-07-26T14:40:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "CodeFirst",
      "url": "https://freesql.net/guide/code-first.html",
      "id": "https://freesql.net/guide/code-first.html",
      "summary": "FreeSql 支持 CodeFirst 迁移结构至数据库，这应该是(O/RM)必须标配的一个功能。 与其他(O/RM)不同的是：FreeSql支持更多的数据库特性，而不只是支持基础的数据类型，这既是优点也是缺点，优点是充分利用数据库特性辅助开发，缺点是切换数据库变得困难。不同程序员的理念可能不太一致，FreeSql尽量把功能支持到极致，至于是否使用是...",
      "content_html": "<p><code>FreeSql</code> 支持 <code>CodeFirst</code> 迁移结构至数据库，这应该是(<code>O/RM</code>)必须标配的一个功能。</p>\n<p>与其他(<code>O/RM</code>)不同的是：<code>FreeSql</code>支持更多的数据库特性，而不只是支持基础的数据类型，这既是优点也是缺点，优点是充分利用数据库特性辅助开发，缺点是切换数据库变得困难。不同程序员的理念可能不太一致，<code>FreeSql</code>尽量把功能支持到极致，至于是否使用是项目组技术衡量的另一个问题。</p>\n<p>尽管多种数据库适配逻辑非常复杂，<code>FreeSql</code>始终秉承优化程序开发习惯的原则尽量去实现，中间碰到了一些非技术无法攻克的难题，比如数据库的自定义类型，和实体类本身就是一种冲突，为了减少使用成本，诸如此类的数据库功能没有得到支持。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">connectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//自动同步实体结构【开发环境必备】，FreeSql不会扫描程序集，只有CRUD时才会生成表。</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Write</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//请务必定义成 Singleton 单例模式</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>迁移结构</h2>\n<p>| 创建数据库 | Sqlite | Sql Server                                                                                                                         | MySql                                                                                                                              | PostgreSQL                                                                                                                        | Oracle |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "",
      "url": "https://freesql.net/guide/config-entity-from-db-first.html",
      "id": "https://freesql.net/guide/config-entity-from-db-first.html",
      "summary": "可以解决，数据库有主键 + 自增，实体层没有配置对应的特性； 从数据库导入主键、自增信息，适用 DbFirst 模式，无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity； 此功能目前可用于 mysql/sqlserver/postgresql/oracle。 开启该功能会增加首次执行时间（耗时情况和表数量有关）...",
      "content_html": "<p>可以解决，数据库有主键 + 自增，实体层没有配置对应的特性；</p>\n<p>从数据库导入主键、自增信息，适用 DbFirst 模式，无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsConfigEntityFromDbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>此功能目前可用于 mysql/sqlserver/postgresql/oracle。</p>\n<blockquote>\n<p>开启该功能会增加首次执行时间（耗时情况和表数量有关）</p>\n</blockquote>\n<h2>优先级</h2>\n<p>数据库特性 &gt; 实体特性 &gt; FluentApi（配置特性） &gt; Aop（配置特性）</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2022-05-16T12:50:28.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "自定义特性",
      "url": "https://freesql.net/guide/custom-attribute.html",
      "id": "https://freesql.net/guide/custom-attribute.html",
      "summary": "自定义特性 本功能可实现与其他 ORM 使用一套 Attribute，避免维护两份实体特性的烦恼： v1.4.0+ 已自动识别 EFCore 实体特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column 优先级 数据库特性 > 实体特性 > Fluen...",
      "content_html": "\n<p>本功能可实现与其他 ORM 使用一套 Attribute，避免维护两份实体特性的烦恼：</p>\n<blockquote>\n<p>v1.4.0+ 已自动识别 EFCore 实体特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetCustomAttributes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstOrDefault</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() as </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//表名</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntityProperty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetCustomAttributes</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstOrDefault</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() as </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> attr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//字段名</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> YourEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyColumn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> pkid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Attribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> MyTableAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">    this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Attribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> MyColumnAttribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">    this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>优先级</h2>\n<p>数据库特性 &gt; 实体特性 &gt; FluentApi（配置特性） &gt; AOP（配置特性）</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2021-06-16T16:56:09.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "DbContext",
      "url": "https://freesql.net/guide/db-context.html",
      "id": "https://freesql.net/guide/db-context.html",
      "summary": "DbContext FreeSql.DbContext 实现类似 EFCore 使用习惯，跟踪对象状态，最终通过 SaveChanges 方法提交事务。 特性 Select/Attach 快照对象，Update 只更新变化的字段； Add/AddRange 插入数据，适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/E...",
      "content_html": "\n<p>FreeSql.DbContext 实现类似 EFCore 使用习惯，跟踪对象状态，最终通过 SaveChanges 方法提交事务。</p>\n<h2>特性</h2>\n<ul>\n<li>Select/Attach 快照对象，Update 只更新变化的字段；</li>\n<li>Add/AddRange 插入数据，适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/ExecuteInserted；</li>\n<li>AddOrUpdate 插入或更新；</li>\n<li>SaveMany 方法快速保存导航对象（一对多、多对多）；</li>\n</ul>\n<h2>安装</h2>\n<blockquote>\n<p>dotnet add package FreeSql.DbContext</p>\n</blockquote>\n<h2>如何使用</h2>\n<p>0、通用方法</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateDbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  //var db1 = ctx.Set&lt;Song&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  //var db2 = ctx.Set&lt;Tag&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SaveChanges</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>注意：DbContext 对象多线程不安全</p>\n</blockquote>\n<p>1、在 OnConfiguring 方法上配置与 IFreeSql 关联</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DbSet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DbSet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  protected</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnConfiguring</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbContextOptionsBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GlobalVar</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //这里直接指定一个静态的 IFreeSql 对象即可，切勿重新 Build()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  //每个 DbContext 只触发一次</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  protected</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> override</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnModelCreating</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ICodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> codefirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    codefirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Entity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"tb_song\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Ignore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Field1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasColumnType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"varchar(50)\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsRequired</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMaxLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">RowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsRowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasDefaultValueSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"current_timestamp\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsUnique</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"idx_xxx11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      //一对多、多对一</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasForeignKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      //多对多</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song_tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    codefirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Entity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasForeignKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">      eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasData</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">          Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">          Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"流行\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">          Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">          {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"真的爱你\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"爱你一万年\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">          })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">          Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">          Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"乡村\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">          Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">          {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"乡里乡亲\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">          })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    codefirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    codefirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongType</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> RowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song_tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Song_id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Tag_id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>使用的时候与 EFCore 类似：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">long</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()) {</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">  id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Enumerable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Range</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Create_time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Is_deleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xxxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"url222\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddRangeAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  for</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">++</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"dkdkdkdk\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UpdateRange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RemoveRange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Skip</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Take</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">20</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  //ctx.Songs.Update(adds.First());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Last</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"skldfjlksdjglkjjcccc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">adds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Last</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  //throw new Exception(\"回滚\");</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SaveChangesAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、注入方式使用</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ConfigureServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceCollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeDbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>在 mvc 中获取：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> _orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ValuesController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">SongContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> songContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>优先级</h2>\n<p>OnConfiguring &gt; AddFreeDbContext</p>\n<h2>说明</h2>\n<ul>\n<li>DbContext 操作的数据在最后 SaveChanges 时才批量保存；</li>\n<li>DbContext 内所有操作，使用同一个事务；</li>\n<li>当实体存在自增时，或者 Add/AddRange 的时候主键值为空，会提前开启事务；</li>\n<li>支持同步/异步方法；</li>\n</ul>\n<h2>合并机制</h2>\n<p>db.Add(new Xxx());\ndb.Add(new Xxx());\ndb.Add(new Xxx());</p>\n<p>这三步，会合并成一个批量插入的语句执行，前提是它们没有自增属性。</p>\n<p>适用 Guid 主键，Guid 主键的值不用设置，交给 FreeSql 处理即可，空着的 Guid 主键会在插入时获取有序不重值的 Guid 值。</p>\n<p>又比如：</p>\n<p>db.Add(new Xxx());\ndb.Add(new Xxx());\ndb.Update(xxx);\ndb.Add(new Xxx());</p>\n<p>Guid Id 的情况下，执行三次命令：前两次插入合并执行，update 为一次，后面的 add 为一次。</p>\n<h2>联级保存</h2>\n<p>请移步文档 <a href=\"/guide/cascade-saving.html\" target=\"_blank\">【联级保存】</a></p>\n<h2>实体变化事件</h2>\n<p>全局设置：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetDbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>单独设置 DbContext 或者 UnitOfWork：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateDbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ctx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>参数 report 是一个 List 集合，集合元素的类型定义如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ChangeInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EntityChangeType</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  /// Type = Update 的时候，获取更新之前的对象</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> BeforeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> enum</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EntityChangeType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { Insert, Update, Delete, SqlRaw }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| 变化类型 | 说明            |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2024-07-26T14:40:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "DbFirst",
      "url": "https://freesql.net/guide/db-first.html",
      "id": "https://freesql.net/guide/db-first.html",
      "summary": "DbFirst 获取所有数据库 获取指定数据库的表信息 .NET Core CLI(推荐使用) 代码生成器FreeSql.Generator,是 FreeSql 的代码生成器，可生成实体类，支持将数据库实体动态生成实体，默认有二个模板，基于 Razor，可指定自定义模板 dotnet-tool安装 FreeSql.Generator 更新FreeSql...",
      "content_html": "\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">connectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//请务必定义成 Singleton 单例模式</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>获取所有数据库</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetDatabases</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回字符串数组, [\"cccddd\", \"test\"]</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>获取指定数据库的表信息</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetTablesByDatabase</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetDatabases</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回包括表、列详情、主键、唯一键、索引、外键、备注等等</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetTableByName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回表的列详情、主键、唯一键、索引、备注等等</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>.NET Core CLI(推荐使用)</h2>\n<p>代码生成器<code>FreeSql.Generator</code>,是 FreeSql 的代码生成器，可生成实体类，支持将数据库实体动态生成实体，默认有二个模板，基于 Razor，可指定自定义模板</p>\n<ul>\n<li><code>dotnet-tool</code>安装 <code>FreeSql.Generator</code></li>\n</ul>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> tool</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> install</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -g</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Generator</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><ul>\n<li>更新<code>FreeSql.Generator</code></li>\n</ul>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">dotnet</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> tool</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> update</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -g</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> FreeSql.Generator</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>新建目录，在地址栏输入 cmd 快速打开命令窗口，输入命令：</p>\n<div class=\"language-bash line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"bash\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-bash\"><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FreeSql.Generator</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> --help</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>命令行工具生成实体类极大好处，后续再次生成覆盖操作等于一键完成，并且支持 Mac/Linux 平台。</p>\n<p><a href=\"https://www.cnblogs.com/igeekfan/p/freesql-generator.html\" target=\"_blank\" rel=\"noopener noreferrer\">详细解读：生成器是如何实现的？</a></p>\n<div class=\"language- line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-\"><span class=\"line\"><span>C:\\WINDOWS\\system32&gt;FreeSql.Generator --help</span></span>\n<span class=\"line\"><span>        ____                   ____         __</span></span>\n<span class=\"line\"><span>       / __/  ____ ___  ___   / __/ ___ _  / /</span></span>\n<span class=\"line\"><span>      / _/   / __// -_)/ -_) _\\ \\  / _ `/ / /</span></span>\n<span class=\"line\"><span>     /_/    /_/   \\__/ \\__/ /___/  \\_, / /_/</span></span>\n<span class=\"line\"><span>                                    /_/</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>  # Github # https://github.com/dotnetcore/FreeSql v2.0.105</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>    FreeSql 快速生成数据库的实体类</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>    更新工具：dotnet tool update -g FreeSql.Generator</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>  # 快速开始 #</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>  &gt; FreeSql.Generator -Razor 1 -NameOptions 0,0,0,0 -NameSpace MyProject -DB \"MySql,Data Source=127.0.0.1;...\"</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -Razor 1                  * 选择模板：实体类+特性</span></span>\n<span class=\"line\"><span>     -Razor 2                  * 选择模板：实体类+特性+导航属性</span></span>\n<span class=\"line\"><span>     -Razor \"d:\\diy.cshtml\"    * 自定义模板文件</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -NameOptions              * 4个布尔值对应：</span></span>\n<span class=\"line\"><span>                                 首字母大写</span></span>\n<span class=\"line\"><span>                                 首字母大写,其他小写</span></span>\n<span class=\"line\"><span>                                 全部小写</span></span>\n<span class=\"line\"><span>                                 下划线转驼峰</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -NameSpace                * 命名空间</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -DB \"MySql,data source=127.0.0.1;port=3306;user id=root;password=root;initial catalog=数据库;charset=utf8;sslmode=none;max pool size=2\"</span></span>\n<span class=\"line\"><span>     -DB \"SqlServer,data source=.;integrated security=True;initial catalog=数据库;pooling=true;max pool size=2\"</span></span>\n<span class=\"line\"><span>     -DB \"PostgreSQL,host=192.168.164.10;port=5432;username=postgres;password=123456;database=数据库;pooling=true;maximum pool size=2\"</span></span>\n<span class=\"line\"><span>     -DB \"Oracle,user id=user1;password=123456;data source=//127.0.0.1:1521/XE;pooling=true;max pool size=2\"</span></span>\n<span class=\"line\"><span>     -DB \"Sqlite,data source=document.db\"</span></span>\n<span class=\"line\"><span>     -DB \"Firebird,database=localhost:D:\\fbdata\\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=2\"</span></span>\n<span class=\"line\"><span>     -DB \"Dameng,server=127.0.0.1;port=5236;user id=2user;password=123456789;database=2user;poolsize=2\"</span></span>\n<span class=\"line\"><span>     -DB \"KingbaseES,server=127.0.0.1;port=54321;uid=USER2;pwd=123456789;database=数据库\"</span></span>\n<span class=\"line\"><span>     -DB \"ShenTong,host=192.168.164.10;port=2003;database=数据库;username=SYSDBA;password=szoscar55;maxpoolsize=2\"</span></span>\n<span class=\"line\"><span>                               * Dameng(达梦数据库)、KingbaseES(人大金仓数据库)、ShenTong(神舟通用数据库)</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -Filter                   Table+View+StoreProcedure</span></span>\n<span class=\"line\"><span>                               默认生成：表+视图+存储过程</span></span>\n<span class=\"line\"><span>                               如果不想生成视图和存储过程 -Filter View+StoreProcedure</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -Match                    表名或正则表达式，只生成匹配的表，如：dbo\\.TB_.+</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>     -FileName                 文件名，默认：{name}.cs</span></span>\n<span class=\"line\"><span>     -Output                   保存路径，默认为当前 shell 所在目录</span></span>\n<span class=\"line\"><span>                               推荐在实体类目录创建 gen.bat，双击它重新所有实体类</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>常用选项</h3>\n<p>| 选项         | 说明                                                                                                                                                  |\n| :</p>\n",
      "image": "https://user-images.githubusercontent.com/16286519/76141354-4790e980-609e-11ea-869b-bb2c6980d98f.png",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "删除",
      "url": "https://freesql.net/guide/delete.html",
      "id": "https://freesql.net/guide/delete.html",
      "summary": "删除 删除是一个非常危险的操作，FreeSql 默认仅支持单表、且有条件的删除方法。 若 Where 条件为空，将不执行真正的 SQL 删除操作。 1、动态条件 dywhere 可以是： 主键值 new[] { 主键值1, 主键值2 } Topic 对象 new[] { Topic对象1, Topic对象2 } new { id = 1 } 2、动态表...",
      "content_html": "\n<p>删除是一个非常危险的操作，FreeSql 默认仅支持单表、且有条件的删除方法。</p>\n<p>若 <code>Where</code> 条件为空，将不执行真正的 SQL 删除操作。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>1、动态条件</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dywhere</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p><code>dywhere</code> 可以是：</p>\n<ul>\n<li>主键值</li>\n<li><code>new[] { 主键值1, 主键值2 }</code></li>\n<li>Topic 对象</li>\n<li><code>new[] { Topic对象1, Topic对象2 }</code></li>\n<li><code>new { id = 1 }</code></li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[] { </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` = 1 OR `Id` = 2)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"test\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[] { new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"test\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }, new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"test\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` in (1, 2))</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>2、动态表名</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Topic_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Topic_201903 表删除</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>3、删除条件</h2>\n<blockquote>\n<p>出于安全考虑，没有条件不执行删除动作，避免误删除全表数据。删除全表数据：<code>fsql.Delete&lt;T&gt;().Where(a =&gt; true).ExecuteAffrows()</code></p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id = @id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (id = @id)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"newtitle\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t7</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">for</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">++</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> $\"newtitle{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> *</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t8</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM `Topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>4、字典删除</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//提示：List&lt;Dictionary&lt;string, object&gt;&gt; 为批量删除</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>5、ISelect.ToDelete 高级删除</h2>\n<p><code>IDelete</code> 默认不支持导航对象，多表关联等。<code>ISelect.ToDelete</code> 可将查询转为 <code>IDelete</code>，以便使用导航对象删除数据，如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToDelete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>注意：此方法不是将数据查询到内存循环删除，上面的代码产生如下 SQL 执行：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">DELETE</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `T1`</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> id </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">id</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> T1 a </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">left join</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> Options b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">on</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">t1id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">id</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> where</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>复杂删除使用此方法的好处：</p>\n<ul>\n<li>删除前可预览测试数据，防止错误删除操作；</li>\n<li>支持复杂的删除操作，例如：<code>ISelect</code> 上使用 <code>Limit(10)</code> 删除附合条件的前 10 条记录；</li>\n</ul>\n<h2>6、IBaseRepository 级联删除</h2>\n<p>1、第一种：基于【对象】级联删除</p>\n<blockquote>\n<p>使用 Include/IncludeMany 贪婪加载 OneToOne/OneToMany/ManyToMany 导航属性，可以使用此方法级联删除它们。</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EnableCascadeSave</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//关键设置</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"group01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"admin01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"pwd01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"用户备注01\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"admin02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"pwd02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"用户备注02\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"admin03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"pwd03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"用户备注03\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//级联添加测试数据</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO \"usergroup\"(\"groupname\") VALUES('group01') RETURNING \"id\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO \"user\"(\"username\", \"password\", \"groupid\") VALUES('admin01', 'pwd01', 1), ('admin02', 'pwd02', 1), ('admin03', 'pwd03', 1) RETURNING \"id\" as \"Id\", \"username\" as \"Username\", \"password\" as \"Password\", \"groupid\" as \"GroupId\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO \"userext\"(\"userid\", \"remark\") VALUES(3, '用户备注01'), (4, '用户备注02'), (5, '用户备注03')</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> groups</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IncludeMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">then</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Include</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Delete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">groups</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//级联删除，递归向下遍历 group OneToOne/OneToMany/ManyToMany 导航属性</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"userext\" WHERE (\"userid\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"user\" WHERE (\"id\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"usergroup\" WHERE (\"id\" = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>2、第二种：基于【数据库】级联删除</p>\n<blockquote>\n<p>根据设置的导航属性，递归删除 OneToOne/OneToMany/ManyToMany 对应数据，并返回已删除的数据。此功能不依赖数据库外键</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UserGroup</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ret</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteCascadeByDatabase</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.\"id\", a.\"username\", a.\"password\", a.\"groupid\" FROM \"user\" a WHERE (a.\"groupid\" = 1)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.\"userid\", a.\"remark\" FROM \"userext\" a WHERE (a.\"userid\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"userext\" WHERE (\"userid\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"user\" WHERE (\"id\" IN (3,4,5))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//DELETE FROM \"usergroup\" WHERE (\"id\" = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//ret   Count = 7 System.Collections.Generic.List&lt;object&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [0] {UserExt} object {UserExt}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [1] {UserExt} object {UserExt}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [2] {UserExt} object {UserExt}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [3] {User}     object {User}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [4] {User}     object {User}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [5] {User}   object {User}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  [6] {UserGroup} object {UserGroup}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserGroup</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Password</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserExt</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> UserExt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UserExt</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Remark</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>API</h2>\n<p>| 方法            | 返回值     | 参数                    | 描述                                                 |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "实体特性✨",
      "url": "https://freesql.net/guide/entity-attribute.html",
      "id": "https://freesql.net/guide/entity-attribute.html",
      "summary": "实体特性✨ v1.4.0+ 已自动识别 EF 特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column 表名 架构：[Table(Name = \"dbo.tb_topic\")] 注意：带点的表名，使用 [Table(Name = \"`sys.confi...",
      "content_html": "\n<p>v1.4.0+ 已自动识别 EF 特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column</p>\n<h2>表名</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"tb_topic\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>架构：[Table(Name = \"dbo.tb_topic\")]</p>\n<p>注意：带点的表名，使用 [Table(Name = \"`sys.config`\")] 解决</p>\n<p>表名映射的几种方法，优先级从小到大：</p>\n<ul>\n<li>1、实体类名</li>\n<li>2、Aop fsql.Aop.ConfigEntity += (_, e) =&gt; e.ModifyResult.Name = \"public.tabname\"</li>\n<li>3、<a href=\"/guide/fluent-api.html\" target=\"_blank\">FluentApi</a> fsql.CodeFirst.ConfigEntity(a =&gt; a.Name(\"public.tabname\"))</li>\n<li>4、[Table(Name = \"public.tabname\")]</li>\n<li>5、AsTable fsql.Select&lt;T&gt;().AsTable((_, old) =&gt; \"public.tabname\").ToList()</li>\n</ul>\n<blockquote>\n<p>v3.2.833 可通过 UseMappingPriority 调整优先级，使用 Aop 实现动态表名</p>\n</blockquote>\n<p>属性：[Column(Name = \"xxx\")]</p>\n<h2>主键(Primary Key)</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>当没有指明主键时，命名为 id 的字段将成为主键；（不区分大小写）</li>\n<li>当主键是 Guid 类型时，插入时会自动创建（有序、不重复）的值，所以不需要自己赋值；（支持分布式）</li>\n</ul>\n<blockquote>\n<p>联合主键，在多个属性标记特性</p>\n</blockquote>\n<blockquote>\n<p>Oracle 主键名长度大于30 [OraclePrimaryKeyName(name)]\nclass table {...}</p>\n</blockquote>\n<h2>自增(Identity)</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>当没有指明主键时，标记自增的成员将成为主键；</li>\n<li>DbFirst 模式序列：[Column(IsIdentity = true, InsertValueSql = \"seqname.nextval\")]</li>\n</ul>\n<h2>唯一键(Unique Key)、索引（Index）</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Index</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"uk_phone\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Phone\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Index</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"uk_group_index\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Group,Index11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Index</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"uk_group_index22\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Group,Index22 desc\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Phone</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Index11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Index22</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>第三个参数 true 的时候是唯一键，false 的时候是普通索引。</li>\n<li>分表场景的索引：[Index(\"{tablename}_idx_01\", \"phone\")]</li>\n</ul>\n<h2>数据库类型(DbType)</h2>\n<p>提示：一般只需使用 .NET 常用类型映射即可（如 int/string/DateTime 等），不需要单独设置 DbType 内容。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">DbType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"varchar(128) NOT NULL default....\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>可以在类型上指定 NOT NULL，也可以通过 [Column(IsNullable = false)] 设置。</p>\n<h3>decimal 精度</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Precision</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Scale</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> decimal</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Amount</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>string 长度</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">StringLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 128</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //或者 [MaxLength(128)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>当长度 -1 时产生的映射如下：</p>\n<p>| MySql | PostgreSQL | SqlServer     | Oracle | Sqlite | Firebird        | DuckDB | MsAccess | 达梦 | 金仓 | 神通 | 南通 |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-06-20T01:38:37.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "过滤器",
      "url": "https://freesql.net/guide/filters.html",
      "id": "https://freesql.net/guide/filters.html",
      "summary": "过滤器 IFreeSql 基础层实现了 Select/Update/Delete 可设置的全局过滤器功能，这些设置将追加到执行的 SQL WHERE 语句中。 Apply 泛型参数可以设置为任何类型，当使用 Select/Update/Delete 方法时会进行过滤器匹配尝试（try catch）： 匹配成功的，将附加 where 条件； 匹配失败的，...",
      "content_html": "\n<p>IFreeSql 基础层实现了 Select/Update/Delete 可设置的全局过滤器功能，这些设置将追加到执行的 SQL WHERE 语句中。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; } </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GlobalFilter</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Apply</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ITenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Apply</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AuthorTest</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ApplyOnly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AuthorTest</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //指定类型精准设置</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ApplyIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestAddEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test4\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //1.9.0 ApplyIf 委托的返回值(第二个参数) true 才生效</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Apply</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ITenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test5\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">before</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //v3.2.700 增加 before 将条件放在 where 最前面</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>Apply 泛型参数可以设置为任何类型，当使用 Select/Update/Delete 方法时会进行过滤器匹配尝试（try catch）：</p>\n<ul>\n<li>匹配成功的，将附加 where 条件；</li>\n<li>匹配失败的，标记下次不再匹配，避免性能损耗；</li>\n</ul>\n<p>ApplyOnly 泛型参数指定一个类型生效。</p>\n<h2>如何禁用？</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestAddEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//所有生效</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestAddEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DisableGlobalFilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"test1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//禁用 test1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TestAddEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DisableGlobalFilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//禁用所有</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>fsql.Update/Delete 方法效果同上。</p>\n<h2>租户字段（动态值）</h2>\n<p>请移步文档：<a href=\"/guide/multi-tenancy.html#%E6%96%B9%E6%A1%88%E4%B8%80-%E6%8C%89%E7%A7%9F%E6%88%B7%E5%AD%97%E6%AE%B5%E5%8C%BA%E5%88%86\" target=\"_blank\">【多租户 - 按租户字段区分】</a></p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "Fluent API",
      "url": "https://freesql.net/guide/fluent-api.html",
      "id": "https://freesql.net/guide/fluent-api.html",
      "summary": "支持 Fluent API FreeSql 提供了 Fluent Api 的方式,使用链式调用，可在外部配置实体的数据库特性。Fluent Api 的方法命名与特性名保持一致，共三种使用方法，选择一种即可： fsql 是一个 IFreeSql 对象、配置尽量只执行一次，避免性能损耗 参考： ConfigEntity FreeSql.Extensions...",
      "content_html": "<h2>支持 Fluent API</h2>\n<p>FreeSql 提供了 Fluent Api 的方式,使用链式调用，可在外部配置实体的数据库特性。<code>Fluent Api</code> 的方法命名与特性名保持一致，共三种使用方法，选择<strong>一种即可</strong>：</p>\n<blockquote>\n<p>fsql 是一个 IFreeSql 对象、配置尽量只执行一次，避免性能损耗 参考：<a href=\"/guide/entity-attribute.html\" target=\"_blank\">《实体特性说明》</a></p>\n</blockquote>\n<h2>ConfigEntity</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"dbo.table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1_id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DbType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"varchar(100)\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsNullable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"dbo.table2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table2_id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>FreeSql.Extensions.EFModel（实验室） 实现了 EFCore FluentApi 代码让 FreeSql 生效</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ApplyConfigurationFromEFCore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BloggingContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderingContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>Entity</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Entity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"tb_song\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Ignore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Field1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasColumnType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"varchar(50)\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsRequired</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMaxLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">RowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsRowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasDefaultValueSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"current_timestamp\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsUnique</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"idx_xxx11\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //一对多、多对一</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasForeignKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //多对多</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song_tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Entity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasForeignKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasData</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"流行\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"真的爱你\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"爱你一万年\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongType</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"乡村\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"乡里乡亲\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongType</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Field1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> long</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> RowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>IEntityTypeConfiguration</h2>\n<p>以继承接口<code>IEntityTypeConfiguration</code>形式配置实体的。</p>\n<ul>\n<li>.NET Framework4.0 不支持</li>\n</ul>\n<h3>实体配置类</h3>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongConfiguration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IEntityTypeConfiguration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Configure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">EfCoreTableFluent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"tb_song1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Ignore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Field1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasColumnType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"varchar(50)\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsRequired</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMaxLength</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">RowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsRowVersion</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasDefaultValueSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"current_timestamp\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsUnique</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"idx_tb_song1111\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //一对多、多对一</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasForeignKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TypeId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //多对多</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        eb</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">HasMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song_tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>二种使用方式</h3>\n<p>1.单个配置</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ApplyConfiguration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongConfiguration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>2.批量配置</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ApplyConfigurationsFromAssembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongConfiguration</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>优先级</h2>\n<p>数据库特性 &gt; 实体特性 &gt; FluentApi（配置特性） &gt; Aop（配置特性）</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-04-28T13:23:44.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "插入或更新",
      "url": "https://freesql.net/guide/insert-or-update.html",
      "id": "https://freesql.net/guide/insert-or-update.html",
      "summary": "插入或更新 1、IFreeSql.InsertOrUpdate IFreeSql 定义了 InsertOrUpdate 方法实现添加或修改的功能，利用数据库特性： 当实体类有自增属性时，批量 InsertOrUpdate 最多可被拆成两次执行，内部计算出未设置自增值、和有设置自增值的数据，分别执行 insert into 和 上面讲到的 merge i...",
      "content_html": "\n<h2>1、IFreeSql.InsertOrUpdate</h2>\n<p>IFreeSql 定义了 InsertOrUpdate 方法实现添加或修改的功能，利用数据库特性：</p>\n<p>| Database   | Features                |     | Database | Features              |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-04-20T01:23:03.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "插入",
      "url": "https://freesql.net/guide/insert.html",
      "id": "https://freesql.net/guide/insert.html",
      "summary": "插入 1、单条插入 2、返回自增 如果表有自增列，插入数据后应该要返回 id。 方法 1：(原始) 方法 2：(依赖 FreeSql.Repository) 仓储内部会将插入后的自增值填充给 items[0].Id (支持批量插入回填) DbFirst 模式序列：[Column(IsIdentity = true, InsertValueSql = \"...",
      "content_html": "\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">for</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">++</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> $\"newtitle{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> *</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>1、单条插入</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO `Topic`(`Clicks`, `Title`, `CreateTime`)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//VALUES(?Clicks0, ?Title0, ?CreateTime0)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>2、返回自增</h2>\n<p>如果表有自增列，插入数据后应该要返回 id。</p>\n<p>方法 1：(原始)</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">long</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>方法 2：(依赖 FreeSql.Repository)</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();  </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//可以从 IOC 容器中获取</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>仓储内部会将插入后的自增值填充给 items[0].Id (支持批量插入回填)</p>\n</blockquote>\n<blockquote>\n<p>DbFirst 模式序列：[Column(IsIdentity = true, InsertValueSql = \"seqname.nextval\")]</p>\n</blockquote>\n<h2>3、批量插入</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//INSERT INTO `Topic`(`Clicks`, `Title`, `CreateTime`)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//VALUES(?Clicks0, ?Title0, ?CreateTime0), (?Clicks1, ?Title1, ?CreateTime1),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//(?Clicks2, ?Title2, ?CreateTime2), (?Clicks3, ?Title3, ?CreateTime3),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//(?Clicks4, ?Title4, ?CreateTime4), (?Clicks5, ?Title5, ?CreateTime5),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//(?Clicks6, ?Title6, ?CreateTime6), (?Clicks7, ?Title7, ?CreateTime7),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//(?Clicks8, ?Title8, ?CreateTime8), (?Clicks9, ?Title9, ?CreateTime9)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>批量插入建议关闭参数化功能，使用 .NoneParameter() 提升执行效率。</p>\n<p>当插入大批量数据时，内部分批执行，规则如下：</p>\n<p>|            | 数量 | 参数量 |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "LinqToSql",
      "url": "https://freesql.net/guide/linq-to-sql.html",
      "id": "https://freesql.net/guide/linq-to-sql.html",
      "summary": "LinqToSql linq to sql 写法过于生硬不灵活，left join 写法非常不好，建议慢慢放充转向 Labmda 链式风格，早日走向康庄大道。 IQueryable 方法入侵问题，如下图很多不能实现的，以及第三方包入侵的扩展方法，严重影响编程体验。 imageimage dotnet add package FreeSql.Extens...",
      "content_html": "\n<p>linq to sql 写法过于生硬不灵活，left join 写法非常不好，建议慢慢放充转向 Labmda 链式风格，早日走向康庄大道。</p>\n<p>IQueryable 方法入侵问题，如下图很多不能实现的，以及第三方包入侵的扩展方法，严重影响编程体验。</p>\n<figure><img src=\"https://user-images.githubusercontent.com/16286519/57295126-5dd7bd00-70fc-11e9-99c0-d1c46423afa2.png\" alt=\"image\" tabindex=\"0\" loading=\"lazy\"><figcaption>image</figcaption></figure>\n<blockquote>\n<p>dotnet add package FreeSql.Extensions.Linq</p>\n</blockquote>\n<h2>特别说明</h2>\n<ul>\n<li>\n<p>请尽量不要在 ISelect 模式下的使用 Linq 方法：GroupJoin、Select、SelectMany、Join、DefaultIfEmpty；</p>\n</li>\n<li>\n<p>如果一定要在 ISelect 中使用 .Select() 方法，请务必在 .ToList() 之前调用它；</p>\n</li>\n</ul>\n<h2>IQueryable</h2>\n<p>FreeSql 提供强大的数据查询对象 ISelect。</p>\n<p>FreeSql.Extensions.Linq v1.4.0+ 实现了 IQueryable 查询对象常用功能，以便在各框架中交互使用。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//将 ISelect 转为 IQueryable</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IQueryable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">queryable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsQueryable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//Linq 方法查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> queryable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstOrDefault</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//将 IQueryable 还原为 ISelect</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ISelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Studeng</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> queryable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">RestoreToSelect</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>注意：IQueryable 的实现目前不支持 GroupBy，可以考虑使用 RestoreSelect 方法转回 ISelect 进行查询</p>\n<h2>Where</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>Select(指定字段)</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>CaseWhen</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        testsub</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ? </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"大于\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"小于或等于\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>Join</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    join b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;() on </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> equals </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    join b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;() on </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> equals </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">bid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    join b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;() on </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> equals </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">bid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>LeftJoin</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    join b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;() on </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> equals </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> into temp</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from tc in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">temp</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DefaultIfEmpty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    join b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;() on </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> equals </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> into temp</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from tc in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">temp</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DefaultIfEmpty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">bid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> tc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    join b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;() on </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> equals </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> into temp</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from tc in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">temp</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DefaultIfEmpty</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">bid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> tc</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>From(多表查询)</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">bid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from b in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">School</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">StudentId</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">bid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>GroupBy(分组)</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    from a in </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Student</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    where </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    group </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> by new {</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> } into g</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    select new {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        cou</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">g</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">age</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "image": "https://user-images.githubusercontent.com/16286519/57295126-5dd7bd00-70fc-11e9-99c0-d1c46423afa2.png",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2024-07-23T19:27:42.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "你不知道的功能 ✨",
      "url": "https://freesql.net/guide/more.html",
      "id": "https://freesql.net/guide/more.html",
      "summary": "你不知道的功能 ✨ 1、备注 -> 迁移到数据库 FreeSql CodeFirst 支持将 c# 代码内的注释，迁移至数据库的备注。先决条件： 1、实体类所在程序集，需要开启 xml 文档功能； 2、xml 文件必须与程序集同目录，且文件名：xxx.dll -> xxx.xml； v1.5.0+ 版本增加了对 Description 特性的解析，优先...",
      "content_html": "\n<h2>1、备注 -&gt; 迁移到数据库</h2>\n<p>FreeSql CodeFirst 支持将 c# 代码内的注释，迁移至数据库的备注。先决条件：</p>\n<p>1、实体类所在程序集，需要开启 xml 文档功能；</p>\n<p>2、xml 文件必须与程序集同目录，且文件名：xxx.dll -&gt; xxx.xml；</p>\n<blockquote>\n<p>v1.5.0+ 版本增加了对 Description 特性的解析，优先级低于 c# 代码注释；</p>\n</blockquote>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "多租户",
      "url": "https://freesql.net/guide/multi-tenancy.html",
      "id": "https://freesql.net/guide/multi-tenancy.html",
      "summary": "多租户 什么是多租户 维基百科：“软件多租户是指一种软件架构，在这种软件架构中，软件的一个实例运行在服务器上并且为多个租户服务”。一个租户是一组共享该软件实例特定权限的用户。有了多租户架构，软件应用被设计成为每个租户提供一个 专用的实例包括该实例的数据的共享，还可以共享配置，用户管理，租户自己的功能和非功能属性。多租户和多实例架构相比，多租户分离了代表...",
      "content_html": "\n<h3>什么是多租户</h3>\n<p>维基百科：“软件多租户是指一种软件架构，在这种软件架构中，软件的一个实例运行在服务器上并且为多个租户服务”。一个租户是一组共享该软件实例特定权限的用户。有了多租户架构，软件应用被设计成为每个租户提供一个 专用的实例包括该实例的数据的共享，还可以共享配置，用户管理，租户自己的功能和非功能属性。多租户和多实例架构相比，多租户分离了代表不同的租户操作的多个实例。</p>\n<p>多租户用于创建 Saas（Software as-a service）应用（云处理）。</p>\n<h3>方案一：按租户字段区分</h3>\n<p>第1步：了解 AsyncLocal&lt;int&gt;</p>\n<p>ThreadLocal 可以理解为字典 Dictionary&lt;int, string&gt; Key=线程ID Value=值，跨方法时只需要知道线程ID，就能取得对应的 Value。</p>\n<p>我们知道跨异步方法可能造成线程ID变化，ThreadLocal 将不能满足我们使用。</p>\n<p>AsyncLocal 是 ThreadLocal 的升级版，解决跨异步方法也能获取到对应的 Value。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TenantManager</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    // 注意一定是 static 静态化</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">_asyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Current</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_asyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_asyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>第2步：FreeSql 全局过滤器，让任何查询/更新/删除，都附带租户条件；</p>\n<p>以下代码若当前没有设置租户值，则过滤器不生效，什么意思？</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 全局过滤器只需要在 IFreeSql 初始化处执行一次</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// ITenant 可以是自定义接口，也可以是任何一个包含 TenantId 属性的实体类型，FreeSql 不需要为每个实体类型都设置过滤器（一次即可）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GlobalFilter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ApplyIf</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ITenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">    \"TenantFilter\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 过滤器名称</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    () =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 过滤器生效判断</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"> // 过滤器条件</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// SELECT .. FROM T</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// SELECT .. FROM T WHERE TenantId = 1</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>第3步：FreeSql Aop.AuditValue 对象审计事件，实现统一拦截插入、更新实体对象；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">PropertyType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Property</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"TenantId\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>第4步：AspnetCore Startup.cs Configure 中间件处理租户逻辑；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Configure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IApplicationBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Use</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">async</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 使用者通过 aspnetcore 中间件，解析 token 获得 租户ID</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> YourGetTenantIdFunction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            await </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 清除租户状态</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            TenantManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseRouting</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseEndpoints</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">MapControllers</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>WhereCascade</h3>\n<p>多表查询时，像 isdeleted 每个表都给条件，挺麻烦的。WhereCascade 使用后生成 sql 时，所有表都附上这个条件。多表租户条件也可以这样解决。</p>\n<p>如：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereCascade</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>得到的 SQL：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> t1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LEFT JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> t2 </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">on</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ... </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>实体可附加表达式时才生效，支持子表查询。单次查询使用的表数目越多收益越大。</p>\n<p>可应用范围：</p>\n<ul>\n<li>子查询，一对多、多对多、自定义的子查询；</li>\n<li>Join 查询，导航属性、自定义的 Join 查询；</li>\n<li>Include/IncludeMany 的子集合查询；</li>\n</ul>\n<blockquote>\n<p>暂时不支持【延时属性】的广播；</p>\n</blockquote>\n<blockquote>\n<p>此功能和【过滤器】不同，用于单次多表查询条件的传播；</p>\n</blockquote>\n<h3>方案二：按租户分表</h3>\n<p>此方案要求每个租户对应不同的数据表，如 Goods_1、Goods_2、Goods_3 分别对应 租户1、租户2、租户3 的商品表。</p>\n<p>这其实就是一般的分表方案，FreeSql 提供了分表场景的几个 API：</p>\n<ul>\n<li>创建表 fsql.CodeFirst.SyncStructure(typeof(Goods), \"Goods_1\")</li>\n<li>操作表 CURD</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> goodsRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Goods</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">old</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Goods</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}_{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantManager</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>上面我们得到一个仓储按租户分表，使用它 CURD 最终会操作 Goods_1 表。</p>\n<blockquote>\n<p>更多说明参考：<a href=\"/guide/repository.html\" target=\"_blank\">《FreeSql.Repository 仓储》</a>、<a href=\"/guide/sharding.html\" target=\"_blank\">《分表分库》</a>。</p>\n</blockquote>\n<blockquote>\n<p>v3.2.833 动态设置表名</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMappingPriority</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MappingPriorityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Attribute</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MappingPriorityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FluentApi</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MappingPriorityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ....;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ConfigEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> $\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TenantAccessor</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Current</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}.{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifyResult</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//表名 };</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Use</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">async</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    // 使用者通过 aspnetcore 中间件，解析 token 得到租户信息</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> YourGetTenantFunction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TenantAccessor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> class</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> TenantAccessor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">IDisposable</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsyncLocal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> static</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ?? </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"public\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> TenantAccessor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Dispose</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        current</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Value</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h3>方案三：按租户分库</h3>\n<ul>\n<li>场景1：同数据库实例（未跨服务器），租户间使用不同的数据库名或Schema区分，使用方法与方案二相同；</li>\n<li>场景2：跨服务器分库，本段讲解该场景；</li>\n</ul>\n<p>第1步：FreeSql.Cloud 为 FreeSql 提供跨数据库访问，分布式事务TCC、SAGA解决方案，支持 .NET Core 2.1+, .NET Framework 4.0+.</p>\n<p>原本使用 FreeSqlBuilder 创建 IFreeSql，需要使用 FreeSqlCloud 代替，因为 FreeSqlCloud 也实现了 IFreeSql 接口。</p>\n<blockquote>\n<p>dotnet add package FreeSql.Cloud</p>\n</blockquote>\n<p>or</p>\n<blockquote>\n<p>Install-Package FreeSql.Cloud</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlCloud</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlCloud</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> ConfigureServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceCollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DistributeTrace</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Split</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Trim</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"main\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> db</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServer</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"data source=main.db\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //db.Aop.CommandAfter += ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> db</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddControllers</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Configure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IApplicationBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IWebHostEnvironment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> env</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Use</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">async</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">context</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        try</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 使用者通过 aspnetcore 中间件，解析 token，查询  main 库得到租户信息。</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> tenant, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> connectionString) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> YourGetTenantFunction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 只会首次注册，如果已经注册过则不生效</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> db</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SqlServer</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">connectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">                //db.Aop.CommandAfter += ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> db</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 切换租户</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Change</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tenant</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            await </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        finally</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 切换回 main 库</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Change</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"main\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseRouting</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseEndpoints</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">MapControllers</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>第2步：直接使用 IFreeSql 访问租户数据库</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> HomeController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">ControllerBase</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">HttpGet</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">([</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FromServices</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 使用 fsql 操作当前租户对应的数据库</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        return</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><ul>\n<li>临时访问其他数据库表，使用 FreeSqlCloud 对象 Use(\"db3\").Select&lt;T&gt;().ToList()</li>\n<li>主库基础表，应该使用 FreeSqlCloud 对象 EntitySteering 设置固定永久定向到 main，而不需要使用 .Use 手工切换</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntitySteering</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntityType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //查询 T 自动定向 db3</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DBKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"db3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "导航属性",
      "url": "https://freesql.net/guide/navigate-attribute.html",
      "id": "https://freesql.net/guide/navigate-attribute.html",
      "summary": "导航属性 FreeSql 提供 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent, PgArrayToMany 六种导航属性关系。 导航属性能干什么？ Where(a => a.Parent.Parent.Name == \"xx\") Where(a => a.Childs.Any(b => b.tit...",
      "content_html": "\n<p>FreeSql 提供 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent, <a href=\"https://www.cnblogs.com/FreeSql/p/16351417.html\" target=\"_blank\" rel=\"noopener noreferrer\">PgArrayToMany</a> 六种导航属性关系。</p>\n<p>导航属性能干什么？</p>\n<ul>\n<li><a href=\"/guide/select-multi-table.html\" target=\"_blank\">《多表查询》</a> Where(a =&gt; a.Parent.Parent.Name == \"xx\") Where(a =&gt; a.Childs.Any(b =&gt; b.title == \"xxx\"))</li>\n<li><a href=\"/guide/select-include.html\" target=\"_blank\">《贪婪加载》</a> Include/IncludeMany</li>\n<li><a href=\"/guide/select-lazy-loading.html\" target=\"_blank\">《延时加载》</a></li>\n<li><a href=\"/guide/select-as-tree.html\" target=\"_blank\">《树表查询》</a></li>\n<li><a href=\"/guide/cascade-saving.html\" target=\"_blank\">《级联保存》</a></li>\n<li><a href=\"/guide/cascade-delete.html\" target=\"_blank\">《级联删除》</a></li>\n<li><a href=\"/guide/aggregateroot.html\" target=\"_blank\">《聚合根仓储》</a></li>\n</ul>\n<p>导航属性进行多表查询非常方便，lambda 表达式中直接使用导航对象点点点，舒服！！</p>\n<h2>自定义配置</h2>\n<p>OneToMany/ManyToMany 支持的类型：ICollection&lt;T&gt;、List&lt;T&gt;、ObservableCollection&lt;T&gt;</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//ManyToOne</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> User</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //在 本实体 查找 GroupId 属性，与 Group.主键 关联</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Group</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Group</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//OneToMany</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Group</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> GroupName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //在 User 查找 GroupId 属性，与 本实体.主键 关联</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">GroupId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Users</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//ManyToMany</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">ManyToMany</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TagSong</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> Items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2024-11-17T04:40:46.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "性能",
      "url": "https://freesql.net/guide/performance.html",
      "id": "https://freesql.net/guide/performance.html",
      "summary": "性能 FreeSql 实现了强大功能的同时，性能没有受到影响，项目中使用反射或耗时的操作都经过了缓存处理。读取数据部分采用了 ExpressionTree，使得 FreeSql 解析实体数据的速度与 Dapper 非常接近。 插入测试 测试结果(52 个字段) 18W 解释：插入 18 万行记录，表格中的数字是执行时间（单位 ms） Oracle 插入...",
      "content_html": "\n<p>FreeSql 实现了强大功能的同时，性能没有受到影响，项目中使用反射或耗时的操作都经过了缓存处理。读取数据部分采用了 ExpressionTree，使得 FreeSql 解析实体数据的速度与 Dapper 非常接近。</p>\n<h1>插入测试</h1>\n<h3>测试结果(52 个字段)</h3>\n<p>|                                      | 18W     | 1W     | 5K     | 2K    | 1K     | 500    | 100 | 50  |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2022-05-16T12:50:28.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "读写分离",
      "url": "https://freesql.net/guide/read-write-splitting.html",
      "id": "https://freesql.net/guide/read-write-splitting.html",
      "summary": "读写分离 FreeSql 支持数据库读写分离，本功能是客户端的读写分离行为，数据库服务器该怎么配置仍然那样配置，不受本功能影响，为了方便描述后面讲到的【读写分离】都是指客户端的功能支持。 各种数据库的读写方案不一，数据库端开启读写分离功能后，读写分离的实现大致分为以下几种： 1、nginx 代理，配置繁琐且容易出错； 2、中间件，如 MyCat； 3、...",
      "content_html": "\n<p>FreeSql 支持数据库读写分离，本功能是客户端的读写分离行为，数据库服务器该怎么配置仍然那样配置，不受本功能影响，为了方便描述后面讲到的【读写分离】都是指客户端的功能支持。</p>\n<p>各种数据库的读写方案不一，数据库端开启读写分离功能后，读写分离的实现大致分为以下几种：</p>\n<p>1、nginx 代理，配置繁琐且容易出错；</p>\n<p>2、中间件，如 MyCat；</p>\n<p>3、在 client 端支持；</p>\n<p>FreeSql 实现了第 3 种方案，支持一个【主库】多个【从库】，【从库】的查询策略为随机方式。</p>\n<p>若某【从库】发生故障，将切换到其他可用【从库】，若已全部不可用则使用【主库】查询。</p>\n<p>出现故障【从库】被隔离起来间隔性的检查可用状态，以待恢复。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> connstr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">    \"Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">connstr</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseSlave</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"connectionString1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"connectionString2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//使用从数据库，支持多个</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//请务必定义成 Singleton 单例模式</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//读【从库】（默认）</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Master</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//强制读【主库】</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"/*master*/ select * from t where ...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//强制读【主库】</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>使用 FreeSqlCloud 另一种读写分离</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> enum</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { db1, db2, db3 }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlCloud</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=:memory:;max pool size=1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=:memory:;max pool size=2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Register</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, () =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=:memory:;max pool size=3\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseAutoSyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">());</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EntitySteering</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    switch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MethodName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Select\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DBKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DbEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">db1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//判断主库时</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dbkeyIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Random</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Next</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AvailableDBKeys</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Length</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">                e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DBKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AvailableDBKeys</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dbkeyIndex</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//重新定向到其他 db</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            break</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Insert\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Update\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Delete\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        case</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"InsertOrUpdate\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            break</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-05-06T06:58:54.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "仓储",
      "url": "https://freesql.net/guide/repository.html",
      "id": "https://freesql.net/guide/repository.html",
      "summary": "FreeSql.DbContext 参考 abp vnext 接口规范，实现了通用的仓储层功能（CURD），理解成传统增强版（DAL）。 Select/Attach 快照对象，Update 只更新变化的字段； Insert 插入数据，适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/ExecuteInserted； 级...",
      "content_html": "<p><code>FreeSql.DbContext</code> 参考 abp vnext 接口规范，实现了通用的仓储层功能（CURD），理解成传统增强版（DAL）。</p>\n\n<ul>\n<li>Select/Attach 快照对象，Update 只更新变化的字段；</li>\n<li>Insert 插入数据，适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/ExecuteInserted；</li>\n<li>级联保存、级联删除（一对一、一对多、多对多）；</li>\n<li>仓储 + 工作单元设计模式，风格简洁、统一；</li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>注意：Repository 对象多线程不安全，因此不应在多个线程上同时对其执行工作。</p>\n</blockquote>\n<h2>临时用法</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> curd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><blockquote>\n<p>适合在局部代码中，临时的创建仓储，用完就扔掉。</p>\n</blockquote>\n<h2>泛型仓储（依赖注入）</h2>\n<p>方法 2、泛型仓储+依赖注入（.NET Core)；</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//先看入门文档注入 IFreeSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//在控制器使用泛型仓储</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> SongsController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&lt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">&gt;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>继承仓储（依赖注入）</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//先看入门文档注入 IFreeSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assembly</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如果没有继承的仓储，第二个参数不用传</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//使用继承的仓储</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> SongsController</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">SongRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">TopicRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> SongRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) : </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">base</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) {}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //在这里增加 CURD 以外的方法</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>对比更新</h2>\n<p>只更新变化的属性：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();  </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//此时快照 item</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"newtitle\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对比快照时的变化</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `tb_topic` SET `Title` = ?p_0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>是不是觉得先查询再更新，啰嗦？</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Attach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//此时快照 item</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"newtitle\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对比快照时的变化</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `tb_topic` SET `Title` = ?p_0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>repo.CompareState(item) 可获取 item 的状态变化信息</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// 比较实体，计算出值发生变化的属性，以及属性变化的前后值</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#986801;--shiki-light-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic\"> name</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">=</span><span style=\"--shiki-light:#50A14F;--shiki-light-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:italic\">\"newdata\"</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">最新的实体对象，它将与附加实体的状态对比</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">param</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">/// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">returns</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">key: 属性名, value: [旧值, 新值]</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">returns</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[]&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CompareState</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> newdata</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>需要注意在使用Repository更新时，不应在ColumnAttribute中指定ServerTime</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionaries</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DictId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FirstAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如果Column特性中存在ServerTime属性可能导致无法修改的情况</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UpdateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">  DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UpdateAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Dictionaries</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"update_time\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">ServerTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTimeKind</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Local</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">UpdateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>登陆信息（依赖注入）</h2>\n<p>repo.DbContextOptions.AuditValue 适合与 AddScoped（依赖注入） 信息结合，统一设置登陆信息。</p>\n<p>如下示例：使用仓储插入/更新时自动使用登陆信息</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;&gt;), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;&gt;));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;,&gt;), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;,&gt;));</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyRepositoryOptions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditValueType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> AuditValueType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> is </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IEntityCreated</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> obj1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> obj1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            obj1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreatedUserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            obj1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreatedUserName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditValueType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> AuditValueType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> is </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IEntityModified</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> obj2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> obj2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            obj2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifiedUserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            obj2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ModifiedUserName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">BaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TKey</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">where</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyRepositoryOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) : </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">base</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">?.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> !=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">long</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">where</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> TEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> MyRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyRepositoryOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) : </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">base</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) { }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> MyRepositoryOptions</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Action</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">DbContextAuditValueEventArgs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">AuditValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>兼容问题</h2>\n<p>SqlServer 提供的 output inserted 特性，在表使用了自增或数据库定义了默认值的时候，使用它可以快速将 insert 的数据返回。PostgreSQL 也有相应的功能，如此方便但不是每个数据库都支持。</p>\n<p>当采用了不支持该特性的数据库（Sqlite/MySql/Oracle/达梦/南大通用/MsAccess），并且实体使用了自增属性，仓储批量插入将变为逐条执行，可以考虑以下改进：</p>\n<ul>\n<li>使用 uuid 作为主键（即 Guid）；</li>\n<li>避免使用数据库的默认值功能；</li>\n</ul>\n<h2>联级保存</h2>\n<p>请移步文档 <a href=\"/guide/cascade-saving.html\" target=\"_blank\">《联级保存》</a></p>\n<h2>API</h2>\n<p>| 属性             | 返回值             | 说明                                           |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "树型查询 ✨",
      "url": "https://freesql.net/guide/select-as-tree.html",
      "id": "https://freesql.net/guide/select-as-tree.html",
      "summary": "树型查询 ✨ 无限级分类（父子）是一种比较常用的表设计，每种设计方式突出优势的同时也带来缺陷，如： 方法 1：表设计中只有 parent_id 字段，困扰：查询麻烦（本文可解决）； 方法 2：表设计中冗余子级 id 便于查询，困扰：添加/更新/删除的时候需要重新计算； 方法 3：表设计中存储左右值编码，困扰：同上； 方法 1 设计最简单，本文解决它的递...",
      "content_html": "\n<p>无限级分类（父子）是一种比较常用的表设计，每种设计方式突出优势的同时也带来缺陷，如：</p>\n<ul>\n<li>方法 1：表设计中只有 parent_id 字段，困扰：查询麻烦（本文可解决）；</li>\n<li>方法 2：表设计中冗余子级 id 便于查询，困扰：添加/更新/删除的时候需要重新计算；</li>\n<li>方法 3：表设计中存储左右值编码，困扰：同上；</li>\n</ul>\n<p>方法 1 设计最简单，本文解决它的递归查询问题，让使用透明化。</p>\n<h2>父子导航属性</h2>\n<p>FreeSql 导航属性之中，有针对父子关系的设置方式，如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Area</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> ParentCode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">ParentCode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Area</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Navigate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(nameof(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">ParentCode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>定义 Parent 属性，在表达式中可以这样：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"中国\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>定义 Childs 属性，在表达式中可以这样（子查询）：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"北京\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>定义 Childs 属性，还可以使用【级联保存】、【贪婪加载】等等操作。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">EnableCascadeSave</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"100000\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"中国\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"110000\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"北京\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">            Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(new[]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"110100\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"北京市\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">                new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{ </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"110101\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"东城区\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> },</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>1、ToTreeList</h2>\n<p>配置好父子属性之后，就可以这样用了：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToTreeList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Single</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Equal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"100000\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Equal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"110000\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Equal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"110100\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Assert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Equal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"110101\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Childs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>ToList 查询数据是平面的，ToTreeList 将返回的平面数据在内存加工为树型 List 返回。</p>\n<h2>2、AsTreeCte 递归删除</h2>\n<p>MySql 连接字符串需要增加 <code>Allow User Variables=True</code>，否则会有 <code>MySqlException Parameter '@cte ids' must be defined</code></p>\n<p>很常见的无限级分类表功能，删除树节点时，把子节点也处理一下。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"中国\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTreeCte</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToDelete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//删除 中国 下的所有记录</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如果软删除：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"中国\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTreeCte</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//软删除 中国 下的所有记录</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>3、AsTreeCte 递归查询</h2>\n<p>若不做数据冗余的无限级分类表设计，递归查询少不了，AsTreeCte 正是解决递归查询的封装，方法参数说明：</p>\n<p>| 参数                 | 描述                                                              |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "贪婪加载 ✨",
      "url": "https://freesql.net/guide/select-include.html",
      "id": "https://freesql.net/guide/select-include.html",
      "summary": "贪婪加载 ✨ 1、子表ToList 接下来的内容，严重依赖的正确配置，请先学会再继续向下！ 2、导航属性 ManyToOne/OneToOne Include 最终使用 Left Join 的方式（查询一次）返回多表记录。 3、集合属性 OneToMany/ManyToMany/PgArrayToMany IncludeMany 最终在 ToList ...",
      "content_html": "\n<h2>1、子表ToList</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//最多执行3次 SQL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    all</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">SongId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//分组之后，最多执行3次 SQL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-08-02T08:08:01.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "延时加载",
      "url": "https://freesql.net/guide/select-lazy-loading.html",
      "id": "https://freesql.net/guide/select-lazy-loading.html",
      "summary": "延时加载 FreeSql 支持延时加载，当需要用到的时候才加载（读数据库），支持 1对1、多对 1、1对多、多对多导航属性。 陷阱：延时加载功能的滥用，会造成多次与 DB 交互，性能降低，请谨慎。 例如：浏览某条订单信息的时候，才显示其对应的订单详细数据，只需要在 Model 导航属性前面添加 virtual 关键字。 延时加载功能默认被关闭的，使用此...",
      "content_html": "\n<p>FreeSql 支持延时加载，当需要用到的时候才加载（读数据库），支持 1对1、多对 1、1对多、多对多导航属性。</p>\n<p>陷阱：延时加载功能的滥用，会造成多次与 DB 交互，性能降低，请谨慎。</p>\n<p>例如：浏览某条订单信息的时候，才显示其对应的订单详细数据，只需要在 Model 导航属性前面添加 virtual 关键字。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderID</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderTitle</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CustomerName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> TransactionDate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">OrderDetails</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> OrderDetail</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> DetailId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Order</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>延时加载功能默认被关闭的，使用此功能之前，请在声明处开启；</p>\n</blockquote>\n<blockquote>\n<p>延时加载功能，依赖 FreeSql.Extensions.LazyLoading 包，请前往 nuget 下载；</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">new</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseLazyLoading</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//开启延时加载功能</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    ...</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> order1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderID</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//查询订单表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> details1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderDetails</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//第一次访问，查询数据库</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> details2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderDetails</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//第二次访问，不查</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> order2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> details1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//此时不查数据库 Order，因为 OrderDetails 查询出来的时候已填充了该属性</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>控制台输出内容：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`OrderID`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`OrderTitle`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`CustomerName`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`TransactionDate`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `Order`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`OrderID`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`DetailId`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`OrderId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `OrderDetail`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`OrderId`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>FreeSql 延时加载支持 1对1、多对 1、1对多、多对多关系的导航属性，前三者大小同异，以下我们单独介绍多对多关系。</p>\n<h2>多对多延时加载</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> partial</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Create_time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Is_deleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Url</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ICollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> partial</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song_tag</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Song_id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Song</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Tag_id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Tag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> partial</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Parent_id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Tag</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> decimal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Ddd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> virtual</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ICollection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>如上有三个表，音乐、标签，以及他们的关系表。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Limit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//取10条音乐</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tags1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//第一次访问，查询数据库</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tags2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Songs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">].</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Tags</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//第二次访问，不查</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>控制台输出内容：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Create_time`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Is_deleted`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Title`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Url`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `Song`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Parent_id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Ddd`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Name`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `Tag`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">exists</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `Song_tag`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Song_id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Tag_id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`Id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">limit</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>总结</h2>\n<p>优点：只在需要的时候加载数据，不需要预先计划，避免了各种复杂的外连接、索引、视图操作带来的低效率问题。</p>\n<p>陷阱：滥用会造成多次与 DB 交互，性能降低，谨慎使用，谨慎使用，谨慎使用。</p>\n<p>如果要在循环中使用数据，请使用贪婪加载，否则使用懒加载。</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2024-07-23T19:27:42.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "多表查询 ✨",
      "url": "https://freesql.net/guide/select-multi-table.html",
      "id": "https://freesql.net/guide/select-multi-table.html",
      "summary": "多表查询 ✨ 1、多表 Join 经验：一对多，分表只取最后一条记录 2、导航属性 Join 提示：正确配置 【导航关系】后，不需要手工调用 LeftJoin 3、WithoutJoin 4、子表Exists 提示：由于子查询的实体类与上层相同，使用 As(\"b\") 指明别名，以便区分 5、子表In 6、子表List导航属性 效果等同于： 将集合属性快...",
      "content_html": "\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Category</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Category</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> CategoryType</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Topics</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> CategoryType</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>1、多表 Join</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CategoryType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//或者</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">From</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CategoryType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">s</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">c</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//减少定义 a,b,c 写法</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">CategoryType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">w</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//LEFT JOIN `Category` b ON a.`CategoryId` = b.`Id`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//LEFT JOIN `CategoryType` c ON b.`ParentId` = c.`Id`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE c. `Id` &gt; 0</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>经验：<a href=\"https://github.com/dotnetcore/FreeSql/issues/430\" target=\"_blank\" rel=\"noopener noreferrer\">一对多，分表只取最后一条记录</a></p>\n</blockquote>\n<h2>2、导航属性 Join</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ParentId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Parent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`, a__Category.`Id` as6, a__Category.`Name`, a__Category.`ParentId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//LEFT JOIN `Category` a__Category ON a__Category.`Id` = a.`CategoryId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//LEFT JOIN `CategoryType` a__Category__Parent ON a__Category__Parent.`Id` = a__Category.`ParentId`</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：正确配置 【导航关系】后，不需要手工调用 LeftJoin</p>\n</blockquote>\n<h2>3、WithoutJoin</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Order</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Product</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">p</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">u</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UserId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> u</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">p</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">u</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ProductId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> p</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithoutJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">!</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">includeProductInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">p</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">u</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">OrderDetailDto</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        OrderId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        OrderNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> o</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OrderNo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> u</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Username</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// User (T3) 始终 JOIN，可直接引用</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        ProductName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> includeProductInfo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ? </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">p</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"N/A\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// includeProductInfo = true: SQL 将 JOIN Product</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// includeProductInfo = false: SQL 将不 JOIN Product，ProductName 会是 \"N/A\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>4、子表Exists</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">As</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"b\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (exists(SELECT 1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    FROM `Topic` b</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    WHERE (b.`Id` = a.`Id`)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    limit 0,1))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：由于子查询的实体类与上层相同，使用 As(\"b\") 指明别名，以便区分</p>\n</blockquote>\n<h2>5、子表In</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">As</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"b\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (((a.`Id`) in (SELECT b.`Id`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    FROM `Topic` b)))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>6、子表List导航属性</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Topics</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//v3.2.600 以下使用 a.Topics.AsSelect()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>效果等同于：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Any</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>将集合属性快速转换为 ISelect 进行子查询操作。</p>\n<h2>7、子表string.Join</h2>\n<p>v1.8.0+ string.Join + ToList 实现将子查询的多行结果，拼接为一个字符串，如：\"1,2,3,4\"</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    concat</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Join</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\",\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">StringJoin01</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, (SELECT group_concat(b.`Id` separator ',')</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//    FROM `StringJoin01` b)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：子查询 string.Join + ToList 适配了 sqlserver/pgsql/oracle/mysql/sqlite/firebird/duckdb/达梦/金仓/南大/翰高 <a href=\"https://github.com/dotnetcore/FreeSql/issues/405\" target=\"_blank\" rel=\"noopener noreferrer\">#405</a></p>\n</blockquote>\n<h2>8、子表First/Count/Sum/Max/Min/Avg</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    all</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    first</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Sum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Avg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>9、子表ToList</h2>\n<blockquote>\n<p>v3.2.650+ 以下最多执行3次 SQL</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    all</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TopicId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>10、WhereCascade</h2>\n<p>多表查询时，像isdeleted每个表都给条件，挺麻烦的。WhereCascade使用后生成sql时，所有表都附上这个条件。</p>\n<p>如：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WhereCascade</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">x</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>得到的 SQL：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> t1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">LEFT JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> t2 </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">on</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ... </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">IsDeleted</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>实体可附加表达式时才生效，支持子表查询。单次查询使用的表数目越多收益越大。</p>\n<p>可应用范围：</p>\n<ul>\n<li>子查询，一对多、多对多、自定义的子查询；</li>\n<li>Join 查询，导航属性、自定义的Join查询；</li>\n<li>Include/<a href=\"/guide/select-include.html\" target=\"_blank\">IncludeMany</a> 的子集合查询；</li>\n</ul>\n<blockquote>\n<p>暂时不支持【延时属性】的广播；</p>\n</blockquote>\n<blockquote>\n<p>此功能和【过滤器】不同，用于单次多表查询条件的传播；</p>\n</blockquote>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-12-12T13:30:23.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "返回数据 ✨",
      "url": "https://freesql.net/guide/select-return-data.html",
      "id": "https://freesql.net/guide/select-return-data.html",
      "summary": "返回数据 ✨ FreeSql 使用 ExpressionTree 读取数据记录，.NET 技术下除了原生代码，最快的方案是 Emit 和 ExpressionTree。 ExpressionTree 天然支持 .NET AOT 编译，FreeSql 在 2018 年做出的技术决策将在未来一直受益。 1、返回单条记录 FreeSql 约定，ToOne/F...",
      "content_html": "\n<p>FreeSql 使用 ExpressionTree 读取数据记录，.NET 技术下除了原生代码，最快的方案是 Emit 和 ExpressionTree。</p>\n<p>ExpressionTree 天然支持 .NET AOT 编译，FreeSql 在 2018 年做出的技术决策将在未来一直受益。</p>\n<h2>1、返回单条记录</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><blockquote>\n<p>FreeSql 约定，ToOne/First 永远返回 null 或 有数据的实体对象，ToList 永远返回非 null 的 List&lt;实体类型&gt;</p>\n</blockquote>\n<h2>2、返回 List</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>3、返回 TreeList</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToTreeList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Area</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"湖北\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTreeCte</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToTreeList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//v1.6.0 AsTreeCte() 递归CTE查询 湖北 下的所有子分类</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>查询数据加工为树型，注意：实体需要配置<a href=\"/guide/select-as-tree.html\" target=\"_blank\">父子导航属性</a></p>\n</blockquote>\n<h2>4、返回 List + 导航属性的数据</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t4</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">LeftJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//此时会查询 Topic普通字段 + 导航对象Category 字段</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>更多导航属性的数据返回：<a href=\"/guide/select-include.html\" target=\"_blank\">贪婪加载</a></p>\n<h2>5、指定返回</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回一个字段</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回匿名类</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">匿名类</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t6</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回元组</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t7</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id, title\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回导航属性</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">匿名类</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t8</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Category</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"> //导航属性</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回SQL字段</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">匿名类</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t9</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    cstitle</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"substr(a.title, 0, 2)\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//将 substr(a.title, 0, 2) 作为查询字段</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    csnow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Convert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToDateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"now()\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//将 now() 作为查询字段</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回子查询的字段</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">匿名类</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Max</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Min</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;2&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//返回子查询集合 v3.2.650+ 以下最多执行3次 SQL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">匿名类</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">TopicId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">匿名类</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t12</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GroupBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Key</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        list1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(),</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        list2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Author</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>常量机制早期留给了原生 SQL，如果真的需要返回该字符串：\"'xxx'\"</p>\n</blockquote>\n<h2>6、忽略字段返回</h2>\n<p>参考实现：<a href=\"https://github.com/dotnetcore/FreeSql/issues/528\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/dotnetcore/FreeSql/issues/528</a></p>\n<h2>7、Dto 映射返回</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况1：Dto 与 Song 属性名相同的字段被查询，返回 List&lt;Dto&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况2：Dto 与 Song 属性名相同的字段被查询，纠正映射 ext，返回 List&lt;Dto&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况3：Lambda 与 Song 类型一样，只查询指定字段 id，返回 List&lt;Song&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况4：Lambda 匿名类型，只查询指定字段 id，返回 List&lt;匿名对象&gt;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>请仔细处理区别，请仔细处理区别，请仔细处理区别</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况5：只查询 id，返回 List&lt;Dto&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况6：查询 id, ext，返回 List&lt;Dto&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况7：查询 id，返回 List&lt;Song&gt;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//情况8：查询 id, ext，返回 List&lt;Song&gt;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>GroupBy 所有方法不使用 DTO 映射规则</p>\n</blockquote>\n<p>这种映射支持单表/多表，在查询数据之前映射（不是先查询所有字段再到内存映射）</p>\n<p>查找规则，查找属性名，会循环内部对象 _tables（join 查询后会增长），以 主表优先查，直到查到相同的字段。</p>\n<p>如：</p>\n<p>A, B, C 都有 id，Dto { id, a1, a2, b1, b2 }，A.id 被映射。也可以指定 id = C.id 映射。</p>\n<p>DTO 查询只映射默认字段（普通属性），映射对象请使用：</p>\n<blockquote>\n<p>导航对象：ToList(a =&gt; new Dto { Catalog = a.Catalog })</p>\n</blockquote>\n<blockquote>\n<p>多表对象：ToList((a, b) =&gt; new Dto { Catalog = b })</p>\n</blockquote>\n<h2>8、ToChunk 分段返回</h2>\n<p>执行查询，分块返回数据，可减少内存开销。比如读取 10 万条数据，每次返回 100 条处理。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToChunk</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">done</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> done</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //done.IsBreak = true; v1.7.0 停止读取</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//新版本</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> asyncEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">OrderBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToChunkAsyncEnumerable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">await </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">foreach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> asyncEnum</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">    foreach</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nickname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>9、ToSql</h2>\n<p>每个 ToList 都可以使用 ToSql 返回 SQL String，有两个选项：</p>\n<ul>\n<li>FieldAliasOptions.AsIndex(默认) 自动产生 as1, as2, as3 .... 字段别名，可以最大程度防止多表，存在相同字段的问题；</li>\n<li>FieldAliasOptions.AsProperty 使用属性名作为字段别名，合适使用二次构造 SQL 再次执行；</li>\n</ul>\n<h2>10、执行 SQL</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> xxx</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Path</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t11</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from song\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ,</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t12</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">int</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from song\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">dynamic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">t13</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">dynamic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from song\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>注意：Ado.Query 的实体特性是无效的，比如 [Column(Name = \"xxx\")] 无效</p>\n</blockquote>\n<h2>11、API</h2>\n<p>| 方法          | 返回值      | 参数                                                     | 描述                                                                                                                |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-04-24T11:16:26.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "单表查询",
      "url": "https://freesql.net/guide/select-single-table.html",
      "id": "https://freesql.net/guide/select-single-table.html",
      "summary": "单表查询 单表 WithSql 使用多次 WithSql 等于 UNION ALL 查询 v3.2.666 、 v3.2.666 WithMemory 使用内存数据进行查询 假设跨数据库服务器，或者数据表被缓存过，WithMemory 便可以实现数据表与内存关联查询。",
      "content_html": "\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CategoryId</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>单表</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">///SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (a.`Id` = 10)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ||</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">///SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (a.`Id` = 10 AND a.`Id` &gt; 10 OR a.`Clicks` &gt; 100)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new []{</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Contains</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM `Topic` a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (a.`Id` in (1,2,3))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>WithSql</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"select * from Topic where clicks &gt; @val\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">val</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Page</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM (select * from Topic where clicks &gt; @val) a</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>使用多次 WithSql 等于 UNION ALL 查询 <a href=\"/guide/ado.html#%E5%8F%82%E6%95%B0%E5%89%8D%E7%BC%80\" target=\"_blank\">请注意参数前缀</a></p>\n</blockquote>\n<blockquote>\n<p>v3.2.666 <a href=\"/guide/unionall.html\" target=\"_blank\">UnionAll 联合查询</a>、<a href=\"/guide/withtempquery.html\" target=\"_blank\">WithTempQuery + FromQuery 嵌套查询</a></p>\n</blockquote>\n<blockquote>\n<p>v3.2.666 WithMemory 使用内存数据进行查询</p>\n</blockquote>\n<blockquote>\n<p>假设跨数据库服务器，或者数据表被缓存过，WithMemory 便可以实现数据表与内存关联查询。</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithMemory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">list</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToList</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime`</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//FROM (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  SELECT ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//  SELECT ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//) a</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-02-07T01:55:32.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "分表分库",
      "url": "https://freesql.net/guide/sharding.html",
      "id": "https://freesql.net/guide/sharding.html",
      "summary": "分表分库 理论知识 分表 - 从表面意思上看呢，就是把一张表分成 N 多个小表，每一个小表都是完整的一张表。分表后数据都是存放在分表里，总表只是一个外壳，存取数据发生在一个一个的分表里面。分表后单表的并发能力提高了，磁盘 I/O 性能也提高了。并发能力为什么提高了呢，因为查询一次所花的时间变短了，如果出现高并发的话，总表可以根据不同 的查询，将并发压力...",
      "content_html": "\n<h2>理论知识</h2>\n<p>分表 - 从表面意思上看呢，就是把一张表分成 N 多个小表，每一个小表都是完整的一张表。分表后数据都是存放在分表里，总表只是一个外壳，存取数据发生在一个一个的分表里面。分表后单表的并发能力提高了，磁盘 I/O 性能也提高了。并发能力为什么提高了呢，因为查询一次所花的时间变短了，如果出现高并发的话，总表可以根据不同 的查询，将并发压力分到不同的小表里面。</p>\n<p>分库 - 把原本存储于一个库的数据分块存储到多个库上，把原本存储于一个表的数据分块存储到多个表上。数据库中的数据量不一定是可控的，在未进行分表分库的情况下，随着时间和业务的发展，库中的表会越来越多，表中的数据量也会越来越大，相应地，数据操作，增删改查的开销也会越来越大；另外，一台服务器的资源（CPU、磁盘、内存、IO 等）是有限的，最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。</p>\n<h2>手工分表 AsTable</h2>\n<p>FreeSql 原生用法、FreeSql.Repository 仓储用法 都提供了 AsTable 方法对分表进行 CRUD 操作，例如：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">oldname</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Log_201903 表 CRUD</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//repo.AsTable((type, oldname) =&gt; $\"{oldname}_201903\"); //对 Log_201903 表 CRUD（级联有关表也增加该后辍）</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... });</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>跨库，但是在同一个数据库服务器下，也可以使用 AsTable(oldname =&gt; $\"db2.dbo.{oldname}\")</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//跨表查询</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table_1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table_2\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//select * from (SELECT a.\"Id\" as1 FROM \"table_1\" a) ftb</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UNION ALL</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//select * from (SELECT a.\"Id\" as1 FROM \"table_2\" a) ftb</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>分表总结：</p>\n<ul>\n<li>分表、相同服务器跨库 可以使用 AsTable 进行 CRUD；</li>\n<li>AsTable CodeFirst 会自动创建不存在的分表；</li>\n<li>不可在分表分库的实体类型中使用《延时加载》；</li>\n</ul>\n<p>SqlServer 跨库事务 可以使用 TransactionScope，如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repoComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Comment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">201903</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}.dbo.{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">oldname</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repoComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">oldname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"{</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">201903</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}.dbo.{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">oldname</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TransactionScope</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">TransactionScope</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    repoComment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Comment</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    repoLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Log</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { ... });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    ts</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Complete</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>分布式数据库 TCC/SAGA 方案请移步：https://github.com/2881099/FreeSql.Cloud</p>\n<h2>自动分表 AsTable (beta)</h2>\n<p>【自动分表】不同于 CURD.AsTable 方法，目前第一期完成按【时间】自动分表（不支持分库）。</p>\n<p>欢迎积极参与测试、反馈，请优先使用源代码进行测试，方便反馈定位问题，谢谢。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">[</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Table</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"as_table_log_{yyyyMM}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"createtime=2022-1-1(1 month)\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> AsTableLog</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Guid</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> msg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> createtime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>从 2022-1-1 开始至当前时间，每月创建一个分表，按 createtime 字段分表</p>\n</blockquote>\n<blockquote>\n<p>若最大日期大于当前时间，可手工扩容分表：</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tableName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetTableByEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsTableLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">AsTableImpl</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetTableNameByColumnValue</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Parse</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"2023-7-1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">autoExpand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//创建数据库表</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DbFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExistsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tableName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> false</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CodeFirst</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SyncStructure</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\">typeof</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">AsTableLog</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tableName</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| 示范                                     | 说明           |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "事务Transaction",
      "url": "https://freesql.net/guide/transaction.html",
      "id": "https://freesql.net/guide/transaction.html",
      "summary": "事务Transaction 1、常规事务 UnitOfWork 是对 DbTransaction 事务对象的封装，方便夹带私有数据。 提示：uow 范围内，尽量别使用 fsql 对象，以免不处在一个事务 使用 UnitOfWorkManager 管理 UnitOfWork，如下： 2、仓储事务（依赖注入） TransactionalAttribute ...",
      "content_html": "\n\n<h2>1、常规事务</h2>\n<p>UnitOfWork 是对 DbTransaction 事务对象的封装，方便夹带私有数据。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrowsAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//uow.Orm API 和 IFreeSql 一样</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteNoneQueryAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)... </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//错误，不在一个事务</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//仓储 CRUD</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：uow 范围内，尽量别使用 fsql 对象，以免不处在一个事务</p>\n</blockquote>\n<p>使用 UnitOfWorkManager 管理 UnitOfWork，如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uowManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//与 uow 同一个事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            uow2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//事务还未提交</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//事务提交</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>2、仓储事务（依赖注入）</h2>\n<ul>\n<li><a href=\"https://freesql.net/guide/unitofwork-manager.html#%E7%AC%AC%E4%BA%8C%E6%AD%A5-%E5%BC%95%E5%85%A5%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86%E5%BA%93\" target=\"_blank\" rel=\"noopener noreferrer\">TransactionalAttribute </a></li>\n</ul>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> WebApplication</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">args</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Func</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IServiceProvider</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsqlFactory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> r</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sqlite</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">@\"Data Source=freedb.db\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    return</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddSingleton</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsqlFactory</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddFreeRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Services</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AddScoped</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SongService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">WebApplication</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> app</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> builder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> SongService</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">_songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Detail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">_detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    readonly</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> UnitOfWorkManager</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> _unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> SongService</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">      IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">      IBaseRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Detail</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">      UnitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> unitOfWorkManager</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    )</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        _unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Transactional</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> async</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //所有注入的仓储对象，都是一个事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E5C07B\">        this</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Test2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Transactional</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> Propagation</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Nested</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">() </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//嵌套事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> async</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Task</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Test3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">      using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> _unitOfWorkManager</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Begin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">          await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_songRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">          await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">_detailRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">DeleteAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">xxx2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">          uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">      }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>具体请移步文档：- <a href=\"/guide/unitofwork-manager.html\" target=\"_blank\">AOP 特性标签实现跨方法事务</a></p>\n<h2>3、同线程事务</h2>\n<p>同线程事务内置在 FreeSql.dll，由 fsql.Transaction 管理事务提交回滚（缺点：不支持异步）。</p>\n<p>用户购买了价值 100 元的商品：扣余额、扣库存。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Transaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(() =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //fsql.Ado.TransactionCurrentThread 获得当前事务对象</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> affrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Wealth</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> -</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Wealth</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        //判断别让用户余额扣成负数</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    //抛出异常，回滚事务，事务退出</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">affrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"用户余额不足\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    affrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Goods</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Stock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> -</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Stock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">affrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">throw</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Exception</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"商品库存不足\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>同线程事务使用简单，需要注意的限制：</p>\n<ul>\n<li>\n<p>事务对象在线程挂载，每个线程只可开启一个事务连接，嵌套使用的是同一个事务；</p>\n</li>\n<li>\n<p>事务体内代码不可以切换线程，因此不可使用任何异步方法，包括 FreeSql 提供的数据库异步方法（可以使用任何 Curd 同步方法）；</p>\n</li>\n</ul>\n<h2>4、悲观锁</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ForUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT ... FROM User a for update nowait</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>for update 在 Oracle/PostgreSQL/MySql 是通用的写法，我们对 SqlServer 做了特别适配，执行的 SQL 语句大致如下：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ... </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">With</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UpdLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">RowLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">NoWait</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>5. 外部事务</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 场景：已经有一个开启的 Connection 和 Transaction</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> conn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlConnection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    conn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Open</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tran</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> conn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 1. 原生/Dapper 操作</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // command.Transaction = tran;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // command.ExecuteNonQuery();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 2. 桥接给 FreeSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 使用扩展方法创建适配器，传入现有的 tran</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tran</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)) </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 在此 uow 下获取的仓储或 Orm，都会使用传入的 tran</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"FreeSql Insert\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 或者直接使用 Orm</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Direct Orm Insert\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 这里的 Commit 只会触发 FreeSql 的事件，不会提交物理事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 3. 真正的提交由最外层控制</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        tran</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-12-16T01:56:25.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "UnitOfWork",
      "url": "https://freesql.net/guide/unit-of-work.html",
      "id": "https://freesql.net/guide/unit-of-work.html",
      "summary": "UnitOfWork UnitOfWork 是对 DbTransaction 事务对象的封装，方便夹带私有数据。 如何使用 提示：uow 范围内，尽量别使用 fsql 对象，以免不处在一个事务 依赖注入（参考）： 外部事务 接口定义 uow.GetOrBeginTransaction() 方法可获取事务对象。 实体变化事件 全局设置： 单独设置： 参数...",
      "content_html": "\n<p>UnitOfWork 是对 DbTransaction 事务对象的封装，方便夹带私有数据。</p>\n<h2>如何使用</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrowsAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//uow.Orm API 和 IFreeSql 一样</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Ado</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteNoneQueryAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">sql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)... </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//错误，不在一个事务</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">    var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Song</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    await </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InsertAsync</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>提示：uow 范围内，尽量别使用 fsql 对象，以免不处在一个事务</p>\n</blockquote>\n<p>依赖注入（参考）：<a href=\"/guide/unitofwork-manager.html\" target=\"_blank\">在 asp.net core 中使用 TransactionalAttribute + UnitOfWorkManager 实现多种事务传播</a></p>\n<h2>外部事务</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">// 场景：已经有一个开启的 Connection 和 Transaction</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> conn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">SqlConnection</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    conn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Open</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> tran</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> conn</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">BeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 1. 原生/Dapper 操作</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // command.Transaction = tran;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // command.ExecuteNonQuery();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 2. 桥接给 FreeSql</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 使用扩展方法创建适配器，传入现有的 tran</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">tran</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)) </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 在此 uow 下获取的仓储或 Orm，都会使用传入的 tran</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"FreeSql Insert\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">            </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 或者直接使用 Orm</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Insert</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">MyEntity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"Direct Orm Insert\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> }).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">            // 这里的 Commit 只会触发 FreeSql 的事件，不会提交物理事务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">            uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">        }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">        // 3. 真正的提交由最外层控制</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        tran</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>接口定义</h2>\n<p>uow.GetOrBeginTransaction() 方法可获取事务对象。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> interface</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> : </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IDisposable</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与工作单元事务保持一致，可省略传递 WithTransaction</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IFreeSql</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Orm</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    DbTransaction</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> GetOrBeginTransaction</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">bool</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> isCreate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">? </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsolationLevel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Commit</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    void</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> Rollback</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 工作单元内的实体变化跟踪</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    DbContext</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">EntityChangeReport</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> EntityChangeReport</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// 用户自定义的状态数据，便于扩展</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">    Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">States</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>实体变化事件</h2>\n<p>全局设置：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetDbContextOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    opt</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">});</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>单独设置：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">using</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">CreateUnitOfWork</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">())</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    uow</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">OnEntityChange</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">        Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">report</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>参数 report 是一个 List 集合，集合元素的类型定义如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> ChangeInfo</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EntityChangeType</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Type</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// Type = Update 的时候，获取更新之前的对象</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    /// </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&lt;/</span><span style=\"--shiki-light:#E45649;--shiki-light-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic\">summary</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> object</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> BeforeObject</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> enum</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> EntityChangeType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { Insert, Update, Delete, SqlRaw }</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>| 变化类型 | 说明            |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-12-16T01:56:05.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "修改",
      "url": "https://freesql.net/guide/update.html",
      "id": "https://freesql.net/guide/update.html",
      "summary": "修改 FreeSql 提供丰富的数据库更新功能，支持单条或批量更新，在特定的数据库执行还可以返回更新后的记录。 1、动态条件 dywhere 可以是： 主键值 new[] { 主键值1, 主键值2 } Topic 对象 new[] { Topic对象1, Topic对象2 } new { id = 1 } 2、动态表名 3、更新条件 除了上面介绍的 d...",
      "content_html": "\n<p><code>FreeSql</code> 提供丰富的数据库更新功能，支持单条或批量更新，在特定的数据库执行还可以返回更新后的记录。</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//如何创建请移步入门文档</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">class</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    [</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Column</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsIdentity</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\">IsPrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> int</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> string</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    public</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#ABB2BF\"> CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">get</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; }</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">}</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>1、动态条件</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dywhere</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p><code>dywhere</code> 可以是：</p>\n<ul>\n<li>主键值</li>\n<li><code>new[] { 主键值1, 主键值2 }</code></li>\n<li>Topic 对象</li>\n<li><code>new[] { Topic对象1, Topic对象2 }</code></li>\n<li><code>new { id = 1 }</code></li>\n</ul>\n<h2>2、动态表名</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Topic_201903\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对 Topic_201903 表更新</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>3、更新条件</h2>\n<blockquote>\n<p>除了上面介绍的 <code>dywhere</code> 构造参数外，还支持 <code>Where lambda/sql</code> 方法</p>\n</blockquote>\n<blockquote>\n<p>出于安全考虑，没有条件不执行更新动作，避免误更新全表数据。更新全表数据：<code>fsql.Update&lt;T&gt;().Where(a =&gt; true).Set(a =&gt; a.Xxx == xxx).ExecuteAffrows()</code></p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"新标题\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Title` = @p_0, `Time` = @p_1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (Id = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>4、更新指定列 Set</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `CreateTime` = '2018-12-08 00:04:59'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>支持 <code>Set()</code> 多次，相当于拼接</p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Clicks` = ifnull(`Clicks`,0) + 1, `Time` = now()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    {</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">        Time</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Clicks` = ifnull(`Clicks`,0) + 1, `Time` = now()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>5、更新实体 SetSource</h2>\n<p>方法 1：(推荐)</p>\n<blockquote>\n<p>只更新变化的属性，依赖 <code>FreeSql.Repository</code></p>\n</blockquote>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRepository</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;(); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//可以从 IOC 容器中获取</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">First</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();  </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//此时快照 item</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"newtitle\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">repo</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">); </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//对比快照时的变化</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Title` = @p_0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>方法 2：(原始)</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//v1.5.0 忽略更新 null 值的属性</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSourceIgnore</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">col</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">col</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> null</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"newtitle\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> };</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Clicks` = @p_0, `Title` = @p_1, `CreateTime` = @p_2</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UpdateColumns</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Title` = @p_0, `CreateTime` = @p_1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IgnoreColumns</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Title` = @p_0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">List</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">for</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &lt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 10</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">++</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> $\"newtitle{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">a</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> *</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 100</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Clicks` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//`Title` = CASE `Id` WHEN 1 THEN @p_10 WHEN 2 THEN @p_11 WHEN 3 THEN @p_12 WHEN 4 THEN @p_13 WHEN 5 THEN @p_14 WHEN 6 THEN @p_15 WHEN 7 THEN @p_16 WHEN 8 THEN @p_17 WHEN 9 THEN @p_18 WHEN 10 THEN @p_19 END,</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//`CreateTime` = CASE `Id` WHEN 1 THEN @p_20 WHEN 2 THEN @p_21 WHEN 3 THEN @p_22 WHEN 4 THEN @p_23 WHEN 5 THEN @p_24 WHEN 6 THEN @p_25 WHEN 7 THEN @p_26 WHEN 8 THEN @p_27 WHEN 9 THEN @p_28 WHEN 10 THEN @p_29 END</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IgnoreColumns</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Title` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Topic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetSource</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">items</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CreateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DateTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Now</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `CreateTime` = @p_0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><blockquote>\n<p>指定 <code>Set</code> 列更新后，<code>SetSource</code> 将失效</p>\n</blockquote>\n<blockquote>\n<p>SetSource 默认依赖实体 IsPrimary 特性，临时主键可使用 SetSource(items, a =&gt; a.Code)</p>\n</blockquote>\n<blockquote>\n<p>Oracle CASE when N'' 字符集不匹配，</p>\n</blockquote>\n<ul>\n<li>原因：实体主键 Column DbType 与表类型不一致造成，</li>\n<li>解决：[Column(DbType = \"varchar2\", StingLength = 255)]</li>\n</ul>\n<h2>6、更新 SetDto</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">clicks</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//UPDATE `Topic` SET `Title` = @p_0, `Clicks` = @p_1 WHERE (Id = 1)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">SetDto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt; { [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"title\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"xxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, [</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"clicks\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">] </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> })</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>7、Set/SetSource/SetDto 区别</h2>\n<p>他们三个是平级功能，分别对应：</p>\n<ul>\n<li>\n<p><code>Set/SetRaw</code> 在知道实体的时候使用，对应 <code>update t set x = x</code></p>\n</li>\n<li>\n<p><code>SetSource</code> 更新整个实体，可以配合 <code>UpdateColumns</code> 或 <code>IgnoreColumns</code> 指定或忽略字段</p>\n</li>\n<li>\n<p><code>SetDto</code> 是 <code>Set</code> 的批量操作</p>\n</li>\n</ul>\n<h2>8、字典更新</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">Dictionary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">string</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">object</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Add</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"name\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"xxxx\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UpdateDict</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">dic</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">AsTable</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"table1\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WherePrimary</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"id\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//提示：List&lt;Dictionary&lt;string, object&gt;&gt; 为批量更新</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>9、乐观锁</h2>\n<p>更新整个实体数据时，在并发情况下极容易造成旧数据将新的记录更新。</p>\n<p>乐观锁的原理，是利用实体某字段，如：<code>long version</code>，更新前先查询数据，此时 <code>version</code> 为 <code>1</code>，更新时产生的 SQL 会附加 <code>where version = 1</code>，当修改失败时（即 <code>Affrows == 0</code>）抛出异常（DbUpdateVersionException）。</p>\n<p>每个实体只支持一个乐观锁属性，在属性前标记特性：<code>[Column(IsVersion = true)]</code> 即可。</p>\n<blockquote>\n<p>适用 <code>SetSource</code> 更新，每次更新 <code>version</code> 的值都会增加 <code>1</code></p>\n</blockquote>\n<h2>10、悲观锁</h2>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">User</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ForUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToOne</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//SELECT ... FROM User a for update nowait</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p><code>ForUpdate</code> 在 Oracle/PostgreSQL/MySql 是通用的写法，我们对 SqlServer 做了特别适配，执行的 SQL 语句大致如下：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ... </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">FROM</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> [User]</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">With</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UpdLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">RowLock</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">NoWait</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>11、ISelect.ToUpdate 高级更新</h2>\n<p><code>IUpdate</code> 默认不支持导航对象，多表关联等。<code>ISelect.ToUpdate</code> 可将查询转为 <code>IUpdate</code>，以便使用导航对象更新数据，如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;().</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Options</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ToUpdate</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Title</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"111\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>注意：此方法不是将数据查询到内存再更新，上面的代码产生如下 SQL 执行：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UPDATE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `T1`</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> SET</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> Title </span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\">=</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> '111'</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> id </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">in</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">select</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">id</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> from</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> T1 a </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">left join</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> Options b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">on</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">t1id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">id</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> where</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">xxx</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>复杂更新使用该方案的好处：</p>\n<ul>\n<li>更新前可预览测试数据，防止错误更新操作；</li>\n<li>支持复杂的更新操作，例如：<code>ISelect</code> 上使用 <code>Limit(10)</code> 更新附合条件的前 10 条记录；</li>\n</ul>\n<h2>12、联表更新 UpdateJoin</h2>\n<p>v3.2.692+（高风险操作，高风险操作，高风险操作，请谨慎谨慎谨慎使用，测试并核对 ToSql 返回的内容）</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Join</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">groupid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">bname</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//其他表字段</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">bcode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> +</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">code</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">flag</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">//固定值</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &amp;&amp;</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>不同数据库产生的 SQL 不一样，以 MySql 为例：</p>\n<div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UPDATE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `T1`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `T2`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`groupid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SET</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`bname`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`name`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`bcode`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\"> concat</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`code`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`flag`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 1</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">WHERE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> AND</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 0</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>更复杂的联表更新：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">var</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Select</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">InnerJoin</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(...)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WithTempQuery</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; new { </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> });</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Update</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&lt;</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">T1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">&gt;()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Join</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">query</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">id</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">groupid</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Set</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">((</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">a</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">bcode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> ==</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\"> b</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">item2</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">xcode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">ExecuteAffrows</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><div class=\"language-sql line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"sql\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-sql\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">UPDATE</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `T1`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  SELECT</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  FROM</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> `t2`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  INNER JOIN</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  Where</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> ...</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) b </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">ON</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`id`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`groupid`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">SET</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> a.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`bcode`</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> b.</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">`xcode`</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>13、高性能 BulkCopy</h2>\n<p>| 程序包                          | 扩展方法              | 说明 (v3.2.693) |\n|</p>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "更新日志",
      "url": "https://freesql.net/reference/change-log.html",
      "id": "https://freesql.net/reference/change-log.html",
      "summary": "更新日志 大约每月一次版本号，暂时以修复 bug 为主 v3.5.309 修复 浮点数解析的西班牙地区报错；#2184 增加 string compare 表达式函数解决；#2087 优化 WithTempQuery 重复字段处理逻辑； v3.5.308 增加 FreeSql.Generator 多语言支持，添加中文和英文的提示信息；#2223 修复 ...",
      "content_html": "\n<p>大约每月一次版本号，暂时以修复 bug 为主</p>\n<h2>v3.5.309</h2>\n<ul>\n<li>修复 浮点数解析的西班牙地区报错；#2184</li>\n<li>增加 string compare 表达式函数解决；#2087</li>\n<li>优化 WithTempQuery 重复字段处理逻辑；</li>\n</ul>\n<h2>v3.5.308</h2>\n<ul>\n<li>增加 FreeSql.Generator 多语言支持，添加中文和英文的提示信息；#2223</li>\n<li>修复 FreeSql.DbContext .net5-.net9 发布问题；#2221</li>\n<li>修复 FreeSql.Extensions.LazyLoading 单文件发布问题，删除 CS-Script.Core 改用官方的库 Microsoft.CodeAnalysis.CSharp；#2217</li>\n<li>优化 实体类映射忽略静态属性；#2218</li>\n</ul>\n<h2>v3.5.307</h2>\n<ul>\n<li>feat: add support for including ignored columns in MapEntityValue method.</li>\n<li>fix: Override Firebird's bitwise operators.</li>\n</ul>\n<h2>v3.5.306</h2>\n<ul>\n<li>修复 ClickHouse 读取到错误列导致插入失败问题；#2194</li>\n<li>补充 SqlExt.DateDiff 对其他数据库的支持；</li>\n</ul>\n<h2>v3.5.305</h2>\n<ul>\n<li>增加 ISelect.WithoutJoin 多表查询时排除某个表；</li>\n<li>增加 CreateUnitOfWork 从外部事务创建；</li>\n<li>增加 TDengine 对Decimal类型支持；</li>\n<li>修复 UnitlOfWorkManager 绑定 DbContext 事务问题；</li>\n<li>修复 Select0Provider.Finalize 可能存在的问题；#2183</li>\n<li>修复 MySql InsertInto Enum MapType(int) 赋值未能解析为 int ；</li>\n<li>修复 Clickhouse 参数化处理 Enum 的问题；</li>\n<li>补充 ObjectPool Async CancellationToken 参数；#2177</li>\n</ul>\n<h2>v3.5.304</h2>\n<ul>\n<li><strong>修复 Contains 解决可能在 net10 出现的问题；</strong>#2144</li>\n<li>增加 Clickhouse DateOnly 支持；</li>\n<li>增加 GBase ExecuteInserted/ExecuteUpdated/ExecuteDeleted 方法；</li>\n<li>增加 GBase CodeFirst 可新增列；</li>\n<li>修复 南大通用使用 DateTime.Date 操作无法比较的问题；</li>\n<li>修复 南大通用对 text 写入报错的问题；</li>\n<li>修复 pgsql 驱动使用 UseMergeInto 语法在 InsertOrUpdate PgCopy 生成了错误的 SQL；</li>\n<li>修复 opengauss 使用 pg 驱动时 merge 语法错误和增加二进制字段值显式类型转换；</li>\n<li>修复 DataType 在 Custom 项目下的设置问题；#2153</li>\n</ul>\n<h2>v3.5.302</h2>\n<ul>\n<li>升级到 .NET 10.0；</li>\n<li>添加 IUpdate.SetByPropertyName 动态指定属性更新；</li>\n<li>修复 MySql Enum MapType(int) 表达式值解析 bug；</li>\n<li>修复 Firebird 批量插入异常问题（BLOB SUB_TYPE BINARY 需要参数化命令）；#2139</li>\n<li>修复 KingbaseES bool 类型解析为 true/false；</li>\n<li>优化 KingbaseES V9 支持和读取链接字符串中的 SearchPath 来确定架构模式；</li>\n<li>优化 强制索引(WithIndex)同时支持 MySql/Oracle/SqlServer/Sqlite；#2130</li>\n<li>优化 PG临时主键插入或更新时自增主键不插入；#2133</li>\n<li>修复 ClickHouseBulkCopy 没传 ColumnNames 与未调用 InitAsync 可能导致 Column names not initialized. Call InitAsync once to load column data；</li>\n<li>补充 IUnitOfWorkManager；#2127</li>\n<li>升级 DuckDB to v1.4.1；#2128</li>\n<li>升级 kdbndp.dll to V9.3.7.1030</li>\n</ul>\n<h2>v3.5.215</h2>\n<ul>\n<li>修复 Clickhouse 批量新增因未指定 Columns 导致报错；</li>\n<li>修复 ClickHouse .LimitBy；#2114</li>\n<li>修复 AOP 优先级最高 Aop.ConfigEntity 无法获取 ModifyIndexResult；</li>\n<li>修复 ZeroDbContext WhereDyanmicFilter DataRange bug；</li>\n<li>修复 ZeroDbContext 多表 Schema 问题；</li>\n<li>修复 OracleDBFirst 生成实体 Schema 清空导致的 -match 无法匹配表；</li>\n<li>修复 子查询In ToList.Contains 开启参数化后可能丢失参数的 bug；UseGenerateCommandParameterWithLambda</li>\n<li>优化 WithLock(NoLock) 同时兼容 SqlServer、达梦；#2058</li>\n<li>优化 SqliteDbFirst 输入参数处理；</li>\n<li>优化 QuestDb IHttpClientFactory、IServiceCollection 相关逻辑；</li>\n<li>优化 QuestDb Insert Update 相关逻辑；</li>\n<li>调整 ClickHouse 驱动 ClickHouse.Client 改成 ClickHouse.Driver；</li>\n</ul>\n<h2>v3.5.213</h2>\n<ul>\n<li>调整 ManyToMany 不一定非要双边设置；</li>\n<li>修复 pgsql WithTempQuery + ToList 对于 bool 类型处理导致的性能问题；#2093</li>\n<li>修复 非公开无参的实体无法获取默认值问题；#2085</li>\n<li>修复 ZeroDbEntity WhereDynamic 多表匹配问题；</li>\n<li>修复 Aop.AuditValue 值变化状态的判断问题；#2101</li>\n<li>修复 SqlServer DbFirst 大小写判断问题；</li>\n<li>修复 MySql 生成 DDL 会报错问题；</li>\n<li>补充 MySql DbFirst Index Name 值；</li>\n<li>补充 pgsql FreeSql.Generator 默认值 uuid_generate_v4() 生成；#2088</li>\n</ul>\n<h2>v3.5.212</h2>\n<ul>\n<li>修复 Oracle InsertOrUpdate Bug；#2047</li>\n</ul>\n<h2>v3.5.211</h2>\n<ul>\n<li>修复 ToChunkAsyncEnumerable 少读一条数据的 bug；#1982 #2056 #2016 #2015</li>\n<li>修复 System.MemoryExtensions.Contains 解析问题；#1993</li>\n<li>修复 Group 查询不支持 aot 问题；#2077</li>\n<li>修复 WithTempQuery + AsTreeCte 生成SQL错误；#2080</li>\n<li>修复 Oracle DbFirst.GetTableByName() 没有返回字段信息；#2074</li>\n<li>修复 GBase DbFirst 字典配置问题；#2078</li>\n<li>修复 GBase 时间类型精度问题；#2079</li>\n<li>修复 Sqlite CodeFirst 特殊表名问题；</li>\n<li>完善 ClickHouse/QuestDB/TDengine 支持 enum 映射；</li>\n<li>增加 SqlExt.Ntile ntile(5) over (order by ...)；</li>\n</ul>\n<h2>v3.5.210</h2>\n<ul>\n<li>增强 全局过滤器支持查询、更新、删除指定生效；#2061</li>\n<li>修复 SqliteCore AOT Expression 隐式将 decimal 转成 int 问题；#2065</li>\n<li>修复 WithMemory 首行为 NULL 值的情况；#2047</li>\n<li>修复 ExecuteSqlBulkCopy() 对于表名有空格的情况处理异常；#2055</li>\n<li>修复 pgsql + JsonMap 无法解析 poco 表达式树的问题；#2060</li>\n<li>优化 pgsql + JsonMap 自动映射为 jsonb；#2060</li>\n</ul>\n<h2>v3.5.209</h2>\n<ul>\n<li>修复 AsTreeCte + InsertInto 语法错误问题；#2045</li>\n</ul>\n<h2>v3.5.208</h2>\n<ul>\n<li>修复 MySql Enum MapType(int) .Contains 解析问题；</li>\n<li>修复 MySql JsonMap Enum 统一解析为 int；#2040</li>\n</ul>\n<h2>v3.5.207</h2>\n<ul>\n<li>修复 Lambda .Contains 通配符解析为非 Like 问题；</li>\n</ul>\n<h2>v3.5.206</h2>\n<ul>\n<li>增加 ISelect.ToChunkAsyncEnumerable 异步流功能；</li>\n<li>增加 FreeSql.Extensions.EFModel 从 efcore modelBuilder FluentApi 同步到 IFreeSql；</li>\n<li>增加 Firebird ForUpdate skiplocked 查询参数；</li>\n<li>修复 Firebird Inserted/Deleted 与 Repository 级联冲突 bug；#2023</li>\n<li>修复 Duckdb CodeFirst Create Index异常；#2027</li>\n<li>修复 ToList 子查询 bug；</li>\n<li>修复 InsertOrUpdate 更新时触发两次 AuditValue；#2020</li>\n<li>调整 Repository 状态管理支持 Ignore 属性（非副本）；</li>\n<li>完善 低代码扩展 FreeSql.Extensions.ZeroEntity；</li>\n</ul>\n<h2>v3.5.203</h2>\n<ul>\n<li>增加 ISelect.Clone() 克隆查询对象；</li>\n<li>增加 ZeroDbContext.LoadSchemaFromDatabase 方法从数据库中加载描述对象；</li>\n<li>修复 MySqlCodeFirst Primary 迁移逻辑；#2005</li>\n<li>修复 .In() 非表达式解析场景的 null 处理；</li>\n<li>忧化 Oracle DbFirst 表特别多的时候生成速度；</li>\n<li>忧化 GroupBySelf + ToList&lt;Dto&gt; 不自动映射；</li>\n<li>调整 SqlExt 聚合函数 Count 统一返回 int；</li>\n</ul>\n<h2>v3.5.202</h2>\n<ul>\n<li>补充 Utils.IsStrict = false 可配置支持中间表有 Id 主键；（解决v3.5.107版本调整影响）</li>\n</ul>\n<h2>v3.5.201</h2>\n<ul>\n<li>修复 .Contains in 表达式函数解析在ar-AE区域问题；#2002</li>\n<li>忧化 IDbFirst Columns 序列与数据库相同；</li>\n<li>补充 UnitOfWorkManager 支持 DbContext 托管工作单元；</li>\n</ul>\n<h2>v3.5.109</h2>\n<ul>\n<li>忧化 GroupBySelf.Where 自动转 having；</li>\n<li>忧化 FreeSql.Provider.PostgreSQL IPostgreSQLProviderOptions 多态参数接口，设置 InsertOrUpdate 采用 MERGE INTO；</li>\n</ul>\n<p>在 FreeSqlBuilder().Build() 之后设置如下：</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> as </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">IPostgreSQLProviderOptions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">).</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">UseMergeInto</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h2>v3.5.108</h2>\n<ul>\n<li>修复 DbSet/Repository CompareState 报错的问题；#1994</li>\n<li>增加 ISelect.GroupBySelf 返回 ISelect；</li>\n</ul>\n<h2>v3.5.107</h2>\n<ul>\n<li>修复 ISelectGroupingAggregate 自定义解析方法报错的问题；</li>\n<li>修复 Custom/Odbc char CodeFirst 映射问题；</li>\n<li>修复 AggregateRoot CompareEntityValue 错误；</li>\n<li>优化 AggregateRoot MapEntityValue 支持将实体映射到字典；</li>\n<li>优化 AggregateRoot 不对比 CanUpdate = false 的字段 ；</li>\n<li>优化 多对多中间表主键配置错误的友好提醒；</li>\n</ul>\n<h2>v3.5.106</h2>\n<ul>\n<li>增加 sqlite 批量插入方式 ExecuteSqliteBulkInsert；#1975</li>\n<li>修复 Oracle CodeFirst nclob cast 转换问题；</li>\n<li>修复 JsonMap Deserialize surpport JsonSerializerSettings；</li>\n<li>修复 Kingbase 判断 v8r3 版本号问题；#1976</li>\n<li>修复 TDengine DateTime 默认值读取异常；#1980 #1977</li>\n</ul>\n<h2>v3.5.102-3.5.105</h2>\n<ul>\n<li>增加 ISelect.Join 与 InnerJoin 方式行为一致；</li>\n<li>增加 ToChunkAsync 异步 Api；#1952</li>\n<li>增加 SqlExt.AggregateCount/AggregateSum 等方法，区分 SqlExt.Count/SqlExt.Sum 开窗方法；</li>\n<li>修复 ExpressionTree 无法将 double -&gt; 转成 int 的问题；</li>\n<li>修复 PgCopy DateTime 映射 date 失败的情况；</li>\n<li>修复 Npgsql postgis 条件编译问题；#1940</li>\n<li>修复 MySql.Data MySqlDateTime 读取为 null 的情况；#1960 #1948</li>\n<li>修复 Oracle CodeFirst clob/blob cast 转换问题；</li>\n<li>修复 KingBase .net8.0 等目标框架 dll 引用问题；</li>\n<li>修复 Firebird 表注释迁移问题（列注释正常）；#1913</li>\n<li>修复 Firebird 批量插入类型转换问题；#1923</li>\n<li>修复 GBase IsNull 日期解析问题；#1953</li>\n<li>修复 DmPrivider 连接达梦主从集群会出错问题；#1955</li>\n<li>修复 达梦数据库上时间相减永远输出为0的问题；#1973</li>\n<li>修复 CodeFirst 修改表名时重建索引的问题；</li>\n<li>修复 GroupBy + WithTempQuery + 子查询参数化问题；#1965</li>\n<li>修复 DateOnly/TimeOnly AOT 裁剪默认报错的问题；</li>\n<li>修复 DateTime 相减时，出现 IIF 无法转换表达式的错误</li>\n<li>修复 AdoConnectionPool 默认不生效的问题；</li>\n<li>修复 CreateInstance 发生歧义的问题；#1962</li>\n<li>修复 In + MapType 无效的问题；</li>\n<li>修复 In + 子查询 别名问题；#1967</li>\n<li>优化 ToList 针对 bool 自动转成 CASE When；</li>\n<li>优化 SqlServer WithIndex 使用习惯；</li>\n<li>忧化 DbFirst Oracle 自动批量插入问题；(2020年方法忘记生效）</li>\n<li>忧化 DateTime.Subtract(date).TotalDays 表达式解析对应 datediff(day, date1, date2)；</li>\n<li>优化 表达式解析 dArray.Select(p =&gt; p.Key).Contains(a.Id)；</li>\n<li>优化 非 join 的多表查询的 SQL 格式；</li>\n</ul>\n<h2>v3.5.101</h2>\n<ul>\n<li>更新 到 .NET9.0；</li>\n<li><strong>增加 DuckDB 数据库支持；</strong> https://freesql.net/guide/freesql-provider-duckdb.html</li>\n<li><strong>增加 TDengine 数据库支持（感谢Daily贡献）；</strong> https://freesql.net/guide/freesql-provider-tdengine.html</li>\n<li>增加 KingBaseES 支持数组等类型（参考 PostgreSQL）；</li>\n<li>增加 Pgsql/MySql DateOnly/TimeOnly 映射；#1868 #1763 #939 #991</li>\n<li>增加 OracleUs7ascii 写入处理特性；</li>\n<li>增加 JsonMap Poco Lambda 表达式成员解析；</li>\n<li>增加 FromQuery 参数由5个加到16个；</li>\n<li>优化 FromQuery/UnionAll 在子查中继续嵌套；</li>\n<li>优化 ISelect&lt;object&gt;.WithMemory 对匿名类型的支持；</li>\n<li>优化 Lambda Dto 指定 .Any() 自动转成 Case when；</li>\n<li>优化 ExpressionCall + DynamicInvoke 的解析；</li>\n<li>优化 LIKE 表达式解析 #1870；</li>\n<li>优化 Lambda Min/Max/First 针对 DateTime 类型不自动处理 IsNull 逻辑，因为各数据库没有统一默认值；</li>\n<li>优化 DateTime.Subtract(date).TotalSecods 等 lambda 表达式解析，对应 datediff；</li>\n<li>优化 DbSet/Repository 删除多主键分批300，防止 SQL AND OR 过长问题；</li>\n<li>优化 DM/KDB/ST 默认使用 ado.net 连接池；</li>\n<li>扩展 TypeHandler override FluentApi 设置；</li>\n<li>扩展 SqlExt.DateDiff 时间差值计算；</li>\n<li>扩展 a.Id.In(..) 自定义函数解析，或 new[]{ 1,2,3 }.Contains(a.Id) 相同；</li>\n<li>修复 Repository + AuditValue + Attach 问题；#1931 #1746</li>\n<li>修复 GBase serial8/bigserial 自增回填的问题；#1919</li>\n<li>修复 Xugu DataType 对应问题；#1934 #1933</li>\n<li>修复 Firebird 批量插入 varchar 追加空格的问题；#1923</li>\n<li>修复 Guid.NewGuid().ToString().Replace(\"-\", \"\") 3.2.810 之后版本的解析问题；</li>\n<li>修复 UnionAll + OrderBy 未处理嵌套的问题；</li>\n<li>移除 TimeSpan 过度 Lambda 解析；</li>\n<li>移除 OdbcDameng/OdbcKingbaseES；</li>\n<li>移除 Resources 转换成 static class 静态类；#1917</li>\n<li>移除 fsql.GetGuidRepository 改用 fsql.GetRepository&lt;T, Guid&gt;()；</li>\n<li>修复 DateOnly/TimeOnly 映射问题；#1868 #1855 #1763 #939 #991</li>\n</ul>\n<h2>v3.2.833</h2>\n<ul>\n<li>添加 Aop.ConfigEntity 动态设置表名功能；#364 #1835 #1729 #1542 #1248 #1247 #407 #387</li>\n<li>增加 UpdateDict/DeleteDict 方法 Where(sql)；#1840</li>\n<li>优化 GroupBy 聚合函数 Count(bool) 解析成 sum(case when)；#1841</li>\n</ul>\n<h2>v3.2.832</h2>\n<ul>\n<li>修复 */表达式解析问题；#1836</li>\n<li>修复 Extesions.Linq COUNT Distinct 生成sql错误；#1838</li>\n<li>优化 Ado读写分离存储过程默认使用从库；#1833</li>\n<li>增加 ZeroEntity 自定义异常及相关；</li>\n</ul>\n<h2>v3.2.830</h2>\n<ul>\n<li>增加 ClickHouse 表分区支持；（感谢d4ilys贡献）</li>\n<li>修复 .Contains('b%') 部分数据库函数参数位置错误；#1826</li>\n<li>修复 ClickHouse 批量更新 DateTime 问题；</li>\n<li>修复 Cilckhouse CodeFirst主键问题；</li>\n<li>调整 命名空间 FreeSql.Provider.ClickHouse.Attributes -&gt; FreeSql.DataAnnotations；#1815</li>\n</ul>\n<h2>v3.2.825</h2>\n<ul>\n<li>修复 开发环境分层编译，可能导致XML注释文件被锁报错的问题；</li>\n<li>修复 聚合根仓储级联插入 OnToMany 雪花主键只插入一条记录；</li>\n</ul>\n<h2>v3.2.822</h2>\n<ul>\n<li>增加 vb.net Lambda 解析 AddChecked/SubtractChecked/MultiplyChecked；</li>\n<li>修复 时枚举转 int 再转字符串报错；#1781</li>\n</ul>\n<h2>v3.2.821</h2>\n<ul>\n<li>修复 clickhouse.client 7.2.2 批量插入失败问题；#1776</li>\n<li>修复 IInsertOrUpdate.ExecuteMySqlBulkCopyAsync 异步方法会出现空引用的异常；#1762</li>\n<li>修复 DynamicCompileBuilder Extend 方法设置基类后失效问题；#1774</li>\n</ul>\n<h2>v3.2.820</h2>\n<ul>\n<li>增加 DynamicEntity TypeBuilder 只读属性；</li>\n<li>修复 .NET9 TimeSpan.FromSeconds Reflect bug；#1748</li>\n<li>修复 IBaseRepository.IncludePropertyName 可能报错的问题；#1740</li>\n<li>修复 弱类型 IBaseRepository&lt;object&gt; 级联操作问题；#1740</li>\n<li>修复 Where(HzyTuple) 参数为 null 时的错误；#1744</li>\n<li>修复 IUpdate.SetSource SqlServer 批量更新 Cast 问题；#1755</li>\n<li>修复 SqlServer 导航属性 .Any 布尔子条件解析问题；</li>\n<li>优化 DbSet/Repository Attach 与 CanUpdate AuditValue 状态不同步问题；#1746</li>\n<li>优化 QuestDb BulkCopy 重命名为：ExecuteQuestDbBulkCopy；#1758</li>\n<li>优化 Clickhouse BulkCopy 重命名为：ExecuteClickHouseBulkCopy；#1758</li>\n</ul>\n<h2>v3.2.815</h2>\n<ul>\n<li>修复 MySqlEnum CHAR/BYTE 替换后前面多个空格的问题；#1737</li>\n<li>修复 Clickhouse ToInt32/ToInt64 解析错误；</li>\n<li>修复 WithMemory 对 InsertValueSql 属性无效的问题；</li>\n<li>修复 ZeroDbContext GroupBy BUG；</li>\n<li>修复 聚合根仓储 InsertOrUpdate OneToMany 只插入一条记录的 bug；</li>\n<li>优化 TypeHandlers 支持 Enum 枚举映射规则；#1634</li>\n</ul>\n<h2>v3.2.812</h2>\n<ul>\n<li>增加 DbContextOptions.AuditValue 基于 Ioc Scoped 审计值；</li>\n<li>优化 ManyToMany 导航属性约定命名匹配嵌套类；</li>\n<li>修复 MySql AsTreeCte pathSelector 别名问题；</li>\n<li>修复 ClickHouse UpdateDict 报错问题；#1712</li>\n<li>修复 MsAccess 日期问题；#1724 #1725</li>\n</ul>\n<h2>v3.2.810</h2>\n<ul>\n<li>修复 GroupBy + WithTempQuery 别名问题；</li>\n<li>修复 DbContext/Repository InsertOrUpdate 无变化时触发 Insert 逻辑报错；#1700</li>\n<li>修复 ClickHouse 数组类型 hasAny 与 In 解析冲突问题；#1699</li>\n<li>补充 WithMemory null/Empty 参数判断；</li>\n<li>优化 表达式树解析；</li>\n</ul>\n<h2>v3.2.808</h2>\n<ul>\n<li><strong>增加 低代码扩展包 <a href=\"/guide/lowcode.html\" target=\"_blank\">FreeSql.Extensions.ZeroEntity</a>；</strong></li>\n<li><strong>增加 Clickhouse Bool/Array 类型适配；（感谢 d4ilys）#1568</strong></li>\n<li>增加 Clickhouse BulkCopy；</li>\n<li>增加 IBaseRepository.AsTable 重载方法支持多表表名设置；</li>\n<li><strong>增加 IAsTable 自动分表支持不规则时间间隔；</strong></li>\n<li><strong>增加 IAsTable.SetTableName 自动分表设置分表名；</strong></li>\n<li><strong>增加 IAsTable.SetDefaultAllTables 自动分表拦截未使用 where 条件的场景；</strong></li>\n<li>增加 IUpdate.ExecuteUpdated 指定字段返回；#1681</li>\n<li>增加 IUpdate.SetDtoIgnore 忽略Dto更新方法；#1688</li>\n<li>增加 ICodeFirst.SyncStructure(TableInfo) 重载方法迁移表结构；</li>\n<li>增加 IUpdate/IDelete WhereDynamicFilter API；#1521</li>\n<li>增加 WithSql(..).WhereDynamicFilter 的支持；</li>\n<li>增加 pgsql 扩展方法 ISelect.DistinctOn；#1680</li>\n<li>修复 Column DbType 与 StringLength 多次替换问题；</li>\n<li>修复 Where(a =&gt; a.bool) 当使用了 MapType(int) 时出现 bug；</li>\n<li>修复 SqlServer 批量更新 bool? null 值生成多余的 case when SQL；</li>\n<li>修复 Xugu 批量插入/更新 SQL 报错；</li>\n<li>修复 OledbOracle 参数化处理 bug；</li>\n<li>修复 多表子查询参数化共享问题；</li>\n<li>修复 嵌套查询 DTO 映射可能触发循环引用 bug；</li>\n<li>补充 达梦 IDbFirst datetime 处理；</li>\n<li>补充 FluentApi AsTable 方法；</li>\n<li><strong>优化 自动分表 join 分表（自动贴合）；</strong></li>\n<li>优化 UnionAll + WithTempQuery 嵌套的 SQL；</li>\n<li>优化 Update 无字段时不做任何处理；</li>\n<li>优化 IUpdate 未使用 .Set 时忽略执行；#1694</li>\n<li>优化 表达式解析变量或常量 ToString；</li>\n</ul>\n<h2>v3.2.805</h2>\n<ul>\n<li>更新 支持到 .net8.0，FreeSql.DbContext 放弃 .netcoreapp2.1 依赖注入；</li>\n<li>调整 DataType.SqlServer/MySql/PostgreSQL 默认使用 Ado 连接池；</li>\n<li>增加 InsertDict ExecuteIdentity 重载指定自增列；</li>\n<li>修复 Expression 导致 AOT 运行失败的问题；</li>\n<li>修复 MySql 8.0 索引 DESC 的判断；#1664</li>\n<li>修复 Xugu Insert + AsTable + ExecuteIdentity bug；</li>\n<li>修复 虚谷日期格式化函数映射；</li>\n<li>优化 RereadSql 支持表的其他字段使用；#1655</li>\n</ul>\n<h2>v3.2.802</h2>\n<ul>\n<li>增加 Aop.AuditDataReader 参数属性 PropertyInfo，实现自定义拦截；</li>\n<li>修复 v3.2.801 AsTreeCte cte_path 别名问题；</li>\n<li>修复 UpdateJoin SetIf 逻辑判断问题；</li>\n<li>修复 UpdateJoin IsVersion 字段的别名问题；</li>\n<li>修复 RawJoin 可能生成错误的 SQL；</li>\n<li>修复 Repository.InsertOrUpdate 更新未变化时的 SQL 错误；#1630</li>\n<li>修复 IncludeMany 变异 Where + ToList dto 无法级联；</li>\n<li>修复 Ado.net 扩展方法 SqliteCore 支持；#1638</li>\n<li>修复 Xugu 有关 bug；</li>\n<li>优化 TypeHandlers 支持 DateTime 映射规则；#1634</li>\n<li>优化 IUpdateJoin AsTable 同时对多表名设置；</li>\n<li>优化 多实例情况下 TableInfo 集合缓存；</li>\n</ul>\n<h2>v3.2.801</h2>\n<ul>\n<li>增加 FreeSql.Internal.Utils.TypeHandlers 自定义类型映射；</li>\n<li>增加 IInsertOrUpdate BatchOptions 选项；</li>\n<li><strong>修复 v3.2.700 oracle/达梦子查询 BUG；</strong></li>\n<li>修复 FreeSql.Geneartor 无法生成人大金仓数据库问题；</li>\n<li>修复 ClickHouse CodeFirst 多主键问题；</li>\n<li>修复 QuestDB BulkCopy 自定义表名无效的问题；</li>\n<li>修复 QuestDb And Or 优先级解析问题；</li>\n<li>修复 DynamicEntity 特性构造函数实例化问题；</li>\n<li>修复 IInsertOrUpdate BulkCopy 临时表名的问题；#1603</li>\n<li>修复 IUpdateJoin + 全局过滤器 + 从表不生效问题；#1612</li>\n<li>修复 JsonMap 进行 null 或非 null 查询；#1613</li>\n<li>修复 GroupBy + WithTempQuery + .Key.xx + 特性名与实体不同 + 三元表达式解析问题；</li>\n<li>修复 MySql AsTreeCte cte_path 可能长度过短问题；</li>\n<li>修复 MySql + InsertOrUpdateDict + IfExistsDoNothing 错误；#1601</li>\n<li>优化 MySql/Sqlite InsertOrUpdate + IfExistsDoNothing 简化 SQL insert ignore into；#1601</li>\n<li>优化 WithLock/WithIndex 非 SqlServer 时忽略；</li>\n<li>优化 MySql ServerTime = DateTimeKind.Utc 不支持 utc_timestamp 默认值问题；#1604</li>\n<li>优化 ObjectPool 恢复可用的时机；</li>\n</ul>\n<h2>v3.2.700 (oracle/达梦子查询有 BUG)</h2>\n<ul>\n<li>增加 GlobalFilter.Apply before 参数将过滤条件插入 where 之前；#1566 #1492</li>\n<li>增加 多表 As 设置别名的方法 fsql.Select&lt;T1, T2&gt;().As(\"t1\", \"t2\")；</li>\n<li>优化 WithTempQuery + SqlServer 未指定 OrderBy 的分页；</li>\n<li>优化 GetPropertiesDictIgnoreCase 不返回没有 get 的属性；</li>\n<li>修复 QuestDB Guid 类型的问题；</li>\n<li>修复 BaseEntity 子查询 .Where 问题；#1586</li>\n</ul>\n<h2>v3.2.698</h2>\n<ul>\n<li>增加 FreeSqlBuilder UseAdoConnectionPool 更换连接池方案；#1524 #1343 #1283 #755</li>\n<li>增加 InsertOrUpdateDict WhereIdentityPrimary 方法；</li>\n<li>增加 pgsql 索引 B_Tree, Hash, GiST, GIN, SP_GiST, BRIN；</li>\n<li>修复 pgsql jsonb poco 方案联表查询问题；#1549 #1071</li>\n<li>修复 pgsql Geo 函数自定义解析深度问题；#1422</li>\n<li>修复 PgCopy 处理 jsonb 类型的问题；#1532</li>\n<li>修复 Enum.ToString() 即使 MapType=int 也应解析成 string；#1252 #806</li>\n<li>修复 repository/dbset AddRange AuditValue IEnumable 失败的 bug；#1545</li>\n<li>修复 达梦某情况连接串解析 user id 问题；</li>\n<li>修复 QuestDB 表达式解析 DateTime.UtcNow bug；</li>\n<li>修复 QuestDb BulkCopy在特定情况下无法解析表名问题；</li>\n<li>优化 QuestDB Guid 映射；</li>\n<li>优化 QuestDB 类型映射，表达式函数解析，新增 QuestFunc 函数解析；</li>\n<li>优化 uow + ISelect.ToUpdate 事务传播；#1562</li>\n<li>调整 QuestDB SampleUnits 命名，去掉 s；</li>\n</ul>\n<h2>v3.2.697</h2>\n<ul>\n<li>增加 IInsertOrUpdate.UpdateSet 指定更新；</li>\n<li>修复 3.2.696 自动分表 bug；#1527 e79860164d5d12e4f7df747f0e29503dff301cb7</li>\n</ul>\n<h2>v3.2.696</h2>\n<ul>\n<li>修复 &lt;object&gt; + AsType + (a as BaseEntity) 解析问题；#1427</li>\n<li>修复 IUpdateJoin 联表更新表达式赋值解析报错；</li>\n<li>修复 MySqlProvider .NetFramework 下可能报初始化类型错误；</li>\n<li>修复 自动分表 IUpdate/IDelete AsTable 不生效的问题；</li>\n<li>修复 FromQuery + WithTempQuery 嵌套查询多层后别名问题；#1510</li>\n<li>修复 WithTempQuery + Oracle 分页问题；#1519</li>\n<li>修复 Oracle 插入 LONG RAW 类型的问题；</li>\n<li>修复 BulkCopyUpdate 临时表名大小写问题；</li>\n<li>优化 IUpdate 批量 case when 同值的 SQL 生成；#1393</li>\n</ul>\n<h2>v3.2.695</h2>\n<ul>\n<li>增加 虚谷数据库 FreeSql.Provider.Xugu；</li>\n<li>增加 IInsert IgnoreInsertValueSql 方法临时忽略 InsertValueSql 设置；</li>\n<li>增加 部分 LocalExecuteScalar Aop.CommandAfter 事件；#1481</li>\n<li>增加 QuestDB SampleBy 对准日历参数；</li>\n<li>增加 动态操作创建实体API，fsql.CodeFirst.DynamicEntity；（感谢 Daily 贡献）</li>\n<li>修复 OracleOledb 引起的读取类型问题；</li>\n</ul>\n<h2>v3.2.693</h2>\n<ul>\n<li>添加 IInsertOrUpdate 高性能插入或更新 SqlServer/MySql/Oracle/Pgsql/达梦/人大金仓；</li>\n<li>增加 IUpdate 高性能批量更新 Oracle/达梦/人大金仓；</li>\n<li>增加 TableInfo.SetAsTable 自动分表的设置；</li>\n<li><strong>修复 SqlServer 自增 BulkUpdate bug；#1476</strong></li>\n<li>修复 表达式树解析 string.Concat 多于3个时的 bug；</li>\n<li>修复 UpdateJoin null 错误；</li>\n<li>优化 UpdateJoin Set 固定值解析；</li>\n<li>优化 .Select&lt;object&gt;().WithSql(sql).ToList() 体验；</li>\n</ul>\n<h2>v3.2.692</h2>\n<ul>\n<li>增加 IUpdate.Join 联表更新功能；(高风险操作，请谨慎使用)</li>\n<li>修复 InsertOrUpdateDict Oracle byte[] 长度判断问题；#1462</li>\n<li>修复 InsertDict 等字典操作在 SqlServer 下的问题；</li>\n<li>修复 ISelect&lt;T&gt; FromQuery 多表重载可能出现 null 报错；</li>\n</ul>\n<h2>v3.2.691</h2>\n<ul>\n<li>增加 ISelect&lt;T&gt; FromQuery 重载多表嵌套；</li>\n<li>增加 实体备注从 Description/Display/DisplayName 等特性兼容读取；</li>\n<li>增加 ISelectGrouping First 方法；</li>\n<li>增加 IInsertOrUpdate SetSource 重载方法；</li>\n<li>优化 WithTempQuery + ToList 使用子查询；</li>\n<li>优化 IInsertOrUpdate SetSource tempPrimary 自增的忽略插入；</li>\n<li>修复 Clickhouse 自动分表 where 条件分析问题；</li>\n<li>修复 DBFirst 延迟加载 ManyToOne 返回总是NULL；#1451</li>\n<li>修复 QuestDB CodeFirst AutoSubtableAttribute/ColumnAttribute判断bug</li>\n</ul>\n<h2>v3.2.690</h2>\n<ul>\n<li>增加 [Navigate(xx, TempPrimary = xx)] 与非主键关联；（仅支持查询）</li>\n<li><strong>修复 3.2.689/3.2.688 WithTempQuery DTO 映射查询遗留问题；</strong></li>\n<li>优化 AsTable 自动分表，提供超始小时的设置；</li>\n</ul>\n<h2>v3.2.688</h2>\n<ul>\n<li><strong>增加 QuestDB 时序数据库支持；（感谢 Daily 贡献）</strong></li>\n<li>修复 Array.Any OR 表达式树解析 bug；</li>\n<li>修复 GroupBy 之后 WithTempQuery 参数化时未传递的问题；</li>\n<li>修复 BulkUpdate 触发 Aop.AuditValue Insert 类型的问题；</li>\n<li>修复 Ado.ExecuteNonQuery 超时参数未生效的问题；#1441</li>\n<li>修复 Firebird CodeFirst 索引 DESC 问题；#1413</li>\n<li>优化 Firebird CodeFirst 迁移代码；</li>\n<li>优化 Firebird 表达式树位运算的适配解析；#1413</li>\n<li>优化 SqlServer timestamp 行版本的支持；#1412</li>\n<li>优化 pgsql15.0 部分类型兼容；#1436</li>\n<li>完善 Sqlite DbFirst 获取索引信息；#1425</li>\n<li>优化 适配达梦最新驱动；</li>\n<li>优化 IUpdate 组合更新方式；</li>\n<li>优化 IUpdate.Set(xx, null) 的情况；</li>\n<li>优化 ISelect&lt;object&gt; AsType 的父子类转换时的情况；#1427</li>\n<li>优化 支持动态操作 IncludeByPropertyName then.WhereDynamicFilter 操作；</li>\n<li>优化 WithTempQuery 场景的 DTO 映射查询；</li>\n</ul>\n<h2>v3.2.687</h2>\n<ul>\n<li><strong>修复 3.2.686 JsonMap bug；</strong></li>\n<li>优化 参数化增加 ExpandoObject 支持；#1403</li>\n<li>优化 pgsql15.0 Version 版本号处理；</li>\n<li>优化 pgsql CodeFirst Syncsture CREATE INDEX code；</li>\n</ul>\n<h2>v3.2.686</h2>\n<ul>\n<li>增加 FreeSqlBuilder UseQuoteSqlName 设置不使用 [] `` \"\" 限定符号；</li>\n<li>增加 Aop.CommandBefore 设置 .CommandText = null 可拦截某次执行；</li>\n<li>增加 IAdo.ExecuteNonQuery 重载方法（虚谷数据库）；</li>\n<li><strong>修复 UseSlaveWeight 异步下可能无效的问题；#1382</strong></li>\n<li>修复 HzyTuple 嵌套解析问题；#1390</li>\n<li>修复 AsType 表达式解析问题；#1389</li>\n<li>修复 pgsql OnConflictDoUpdate 临时主键问题；#1393</li>\n<li>修复 ClickHouse 联表查询 GLOBAL left join、Ado.Query * 问题；#1383</li>\n<li>优化 ClickHouse like 为 positionCaseInsensitive #1386</li>\n<li>优化 JsonMap 对基础类型的无效判断；#1385</li>\n<li>优化 IUpdate 批量 case when 同值的 SQL 生成；#1393</li>\n<li>优化 IAdo.ConnectionString 使用 UseConnectionFactory 时值为 NULL 的问题；</li>\n</ul>\n<h2>v3.2.685</h2>\n<ul>\n<li><strong>增加 IUpdate&lt;T&gt; BulkCopy 批量更新扩展方法；（暂时支持 SqlServer/MySql/PostgreSQL）</strong></li>\n<li>修复 ClickHouse CodeFirst 表结构同步问题；</li>\n<li>修复 ISelectGrouping ToSql AsProperty 别名无效问题；</li>\n<li>优化 UnitOfWork 与 ForUpdate 事务开启逻辑；</li>\n<li>优化 MySqlConnector MySqlDataTime 读取；</li>\n<li>优化 linq.dynamic Expression Invoke 解析；#1378</li>\n</ul>\n<h2>v3.2.684</h2>\n<ul>\n<li><strong>修复 Firebird CodeFirst.SyncStructure 自增主键错误；(受影响版本 3.2.666-3.2.683)</strong></li>\n<li>修复 Firebird [Index(\"{tablename}_Name\" 分表索引名未处理的 bug；#1346</li>\n<li>修复 InsertDict DBNull.Value 值无法插入的问题；#1336</li>\n<li>修复 fsql.InsertOrUpdate SetSource(sql) 无效的 bug；</li>\n<li>优化 string[].Any(..) 表达式树解析；ReplaceParameterVisitor</li>\n<li>优化 ISelect&lt;T1, T2&gt; 对象 .LeftJoin&lt;T2&gt; 表别名；#1348</li>\n</ul>\n<h2>v3.2.683</h2>\n<ul>\n<li><strong>修复 Repository/DbContext 同一实例执行报错后续无法再 CRUD；</strong></li>\n<li><strong>修复 UnitOfWorkManager + Repository.SaveMany 事务切换问题；</strong></li>\n<li>修复 导航属性 PgArrayToMany 数组字段为空时的 bug；</li>\n<li>修复 导航属性 PgArrayToMany DTO 异步查询报错的 bug（同步方法正常）；</li>\n<li>修复 SqlExt count/avg 开窗函数参数；#1321</li>\n<li>修复 Sqlite TimeSpan 类型映射错误；</li>\n<li>修复 Sqlite Attachs 多库索引 {tablename} 问题；</li>\n<li>修复 EndEdit 未触发 OnEntityChange；</li>\n<li>修复 fsql.InsertOrUpdate CanInsert=false,CanUpdate=true (mysql/pgsql）不生效的 bug；</li>\n<li>修复 聚合根仓储（实验） InsertOrUpdate 重复插入的 bug；</li>\n<li>修复 聚合根仓储（实验） Update 未更新自增状态管理的 bug；</li>\n<li>修复 SqlServer WithSql + WithLock bug；</li>\n<li>修复 ClickHouse Ado 参数化无效的问题；#1340</li>\n<li>修复 Odbc 自定义 N'' 无效；#1332</li>\n<li>修复 DbContext DbSet 属性初始并发时未触发 OnModelCreating；#1333</li>\n<li>修复 Utils.ReplaceSqlConstString bug；</li>\n<li>扩展 UseMessagePackMap 示例；</li>\n<li>优化 UpdateDict 支持 .IsVersion 乐观锁设置；</li>\n<li>优化 InsertDict DBNull.Value 值处理；#1336</li>\n<li>优化 表达式树解析 w =&gt; (w as TBase).Id；</li>\n<li>优化 导航属性集合 .Exists 效果与 .Any 相同；</li>\n<li>优化 MySql CodeFirst 判断表是否存在的查询语句性能；</li>\n<li>优化 SqlServer2005 TOP 1 查询；</li>\n<li>完善 SqlServer WithLock + WithIndex 扩展方法；</li>\n</ul>\n<h2>v3.2.682</h2>\n<ul>\n<li>优化 人大金仓 KingbaseES 兼容 V8R3/V8R6；#931 #325</li>\n</ul>\n<h2>v3.2.681</h2>\n<ul>\n<li><strong>修复 3.2.666-3.2.680 子查询的特殊 bug；</strong></li>\n<li>增加 fsql.Ado.QuerySingle(() =&gt; new {}) 扩展方法实现无表查询 SELECT now(), utc_timestamp()</li>\n<li>优化 min pool size 与 max pool size 连接串设置；</li>\n<li>优化 导航属性未配置关系先 Where 后 InnerJoin 的问题；</li>\n</ul>\n<h2>v3.2.680</h2>\n<ul>\n<li><strong>优化 WithTempQuery 多对象选择同别名问题；</strong> #1192</li>\n<li>修复 WithTempQuery + Column + GroupBy + Key 指定列名的问题；</li>\n<li>修复 GlobalFilter.ApplyIf + Repository.DataFilter.DisableAll 可能不生效的问题；</li>\n<li>修复 UpdateDict 不支持 SET NULL 的更新；#1257</li>\n<li>修复 ClickHuse DBFrist ExistsTable；</li>\n<li>增加 ClickHouse LimitBy/Sample 查询方法；</li>\n<li><strong>增加 所有<a href=\"https://freesql.net/guide/freesql-provider-custom.html\" target=\"_blank\" rel=\"noopener noreferrer\">国产数据库</a>支持 CustomMySql、CustomPostgreSQL、CustomOracle、CustomSqlServer 自定义适配；</strong></li>\n<li>优化 DbSet/Repository 防止 Aop.AuditValue 触发两次；</li>\n<li>优化 表达式树解析为 NULL 的提示；</li>\n<li>优化 UseMappingPriority 与实体元数据逻辑；#1247</li>\n<li>优化 ServerTime 与 IUpdate.Set 指定更新的重复问题；#1251</li>\n</ul>\n<h2>v3.2.669</h2>\n<ul>\n<li>修复 WithTempQuery + RereadSql 无别名的问题；</li>\n<li>修复 WithTempQuery + FromQuery + 子查询的 bug；</li>\n<li>修复 WithTempQuery + Column(Name 别名问题；</li>\n<li>优化 CheckAvailable retry 重试一次；</li>\n</ul>\n<h2>v3.2.666</h2>\n<ul>\n<li><strong>增加 WithTempQuery + FromQuery 嵌套查询功能；</strong> #1192</li>\n<li><strong>增加 FreeSql.Provider.OracleOledb 解决 US7ASCII 中文乱码问题；</strong></li>\n<li><strong>增加 UnionALL 联合查询；</strong> #1106 #1104 #668 #478 #432 #213 #138</li>\n<li>增加 WithMemory 基于内存查询，对标 WithSql；</li>\n<li>增加 AuditValue ObjectAuditBreak 实现对象只触发一次审计事件；</li>\n<li>增加 IncludeByPropertyName 重载 then 参数；#1214</li>\n<li>增加 IInsertOrUpdate.SetSource(sql) 重载方法；</li>\n<li>增加 DynamicFilterCustom 增加支持 Expression 返回值；</li>\n<li>修复 UseGenerateCommandParameterWithLambda(true) 与 GroupBy 查询不生效 bug；</li>\n<li>修复 ToList 子查询开启参数化重复参数的 bug；#1205</li>\n<li><strong>修复 string[] JsonMap bug；</strong> #653</li>\n<li>修复 ManyToMany 不会触发 AsTable 的 bug；</li>\n<li>修复 Clickhouse Insert AsTable 表名处理 bug；</li>\n<li>修复 ClickHouse 单条记录插入\\t \\n /失败的 bug；</li>\n<li>修复 子查询使用基类 + AsType 可能产生的 bug；#1215</li>\n<li>修复 SqlServer2005/2008 Skip 问题（未设置 Take 时）；</li>\n<li>修复 MySql/SqlServer DbFirst 获取字段位置的问题；</li>\n<li>修复 DbContext/Repository Primary decimal 状态管理 key 精度处理 bug；</li>\n<li>修复 DbContext/Repository 无构造函数的实体对象不跟踪问题；</li>\n<li>修复 ToSql AsProperty 大小别名问题；</li>\n<li>优化 IncludeByPropertyName + AsType；</li>\n<li>优化 字典crud TableInfo 合并规则；#1180</li>\n<li>优化 IUpdate.Set 字符串累加本身为 NULL 的情况；#1209</li>\n<li>优化 WhereDynamicFilter DateRange 情况；</li>\n<li>优化 Oracle IN :ids 值传入 IList 时报错；</li>\n<li>优化 Dameng 单独适配 netcore3.1；#1094</li>\n<li><strong>优化 PrevReheatConnectionPool 预热；</strong></li>\n<li>优化 全局过滤器禁用时子查询传播问题；#1208</li>\n<li><strong>优化 子查询别名为 a 的情况；#1201</strong></li>\n</ul>\n<h2>v3.2.665</h2>\n<ul>\n<li>增加 IsVersion string 字符串乐观锁；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1178\" target=\"_blank\" rel=\"noopener noreferrer\">#1178</a></li>\n<li>增加 IUpdate.SetSource ignoreVersion 参数可实现忽略乐观锁；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1161\" target=\"_blank\" rel=\"noopener noreferrer\">#1161</a></li>\n<li>增加 IInsertOrUpdate.SetSource(items, tempPrimarys) 指定临时主键参数；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1160\" target=\"_blank\" rel=\"noopener noreferrer\">#1160</a></li>\n<li>增加 DbContext/Repository 审计日志 ChangeInfo 增加属性 EntityType；</li>\n<li>修复 SqlServer WithLock 子查询不生效的 bug；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1159\" target=\"_blank\" rel=\"noopener noreferrer\">#1159</a></li>\n<li>修复 AsTreeCte + AsTable 无效的 bug；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1176\" target=\"_blank\" rel=\"noopener noreferrer\">#1176</a></li>\n<li>修复 UseGenerateCommandParameterWithLambda(true) 问题；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1173\" target=\"_blank\" rel=\"noopener noreferrer\">#1173</a> <a href=\"https://github.com/dotnetcore/FreeSql/issues/900\" target=\"_blank\" rel=\"noopener noreferrer\">#900</a></li>\n<li>修复 SetSource 临时主键重载方法 + Column 设置 Name 后无效的 bug；</li>\n<li>修复 Dto 映射查询 Negate 表达式解析 bug；</li>\n<li>修复 pgsql OldName + XML 注释迁移代码顺序问题；</li>\n<li>优化 string Contains 模糊查找 % 的情况；</li>\n</ul>\n<h2>v3.2.664</h2>\n<ul>\n<li><strong>修复 UseGenerateCommandParameterWithLambda 子查询并发 bug；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1155\" target=\"_blank\" rel=\"noopener noreferrer\">#1155</a> （重要）</strong></li>\n<li>修复 pgsql Dto 映射使用常量 false 转换失败；</li>\n<li>修复 IIF 三元表达式树解析 bool HasValue 问题；</li>\n<li>修复 MySqlConnector BulkCopy 映射顺序问题；</li>\n<li>优化 XML 注释读取支持 interface；</li>\n<li>support provider、Extensions Exceptions 多语言</li>\n</ul>\n<h2>v3.2.662</h2>\n<ul>\n<li><strong>调整 pgsql10 自增映射使用 GENERATED BY DEFAULT AS IDENTITY，低版本仍然使用 serial；</strong></li>\n<li><strong>增加 PgArrayToMany 专属导航属性；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1145\" target=\"_blank\" rel=\"noopener noreferrer\">#1145</a></strong></li>\n<li>增加 ObservableCollection 级联加载和保存；</li>\n<li>优化 FluentApi 继承关系可直接 ConfigEntity&lt;BaseEntity&gt; 生效；#1144</li>\n<li>修复 达梦 min pool size 预热数量匹配 bug；</li>\n<li>修复 v3.2.620 - v3.2.661 子查询 sum/min/max/avg 默认加 isnull 防止为 NULL 情况，日期类型处理错误 #1140 1b84a0069679c92ccaff9aa8c33023e4d34262cd</li>\n<li>修复 AsTable 子查询未传播的问题；#1103</li>\n<li>修复 IncludeByPropertyName fromFirstTable 判断错误；#278</li>\n<li>修复 GroupBy 特殊情况下 AsProperty 无效的 bug；#1141</li>\n<li>修复 MySql CodeFirst OldName + Comment 迁移问题；#1147</li>\n<li>修复 pgsql DbFirst 未正确获取 Position 值；#1154</li>\n</ul>\n<h2>v3.2.661</h2>\n<ul>\n<li>增加 UseMappingPriority 指定映射优先级；<a href=\"https://github.com/dotnetcore/FreeSql/issues/387\" target=\"_blank\" rel=\"noopener noreferrer\">#387</a> <a href=\"https://github.com/dotnetcore/FreeSql/issues/69\" target=\"_blank\" rel=\"noopener noreferrer\">#69</a> <a href=\"https://github.com/dotnetcore/FreeSql/issues/99\" target=\"_blank\" rel=\"noopener noreferrer\">#99</a></li>\n<li>增加 AuditValueEventArgs Object 参数；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1128\" target=\"_blank\" rel=\"noopener noreferrer\">#1128</a></li>\n<li>修复 pgsql varchar(120) CodeFirst 迁移不修改长度；</li>\n<li>修复 ISelect.InsertInto 未执行自动迁移；</li>\n<li>修复 UseCommandParameterWithLambda IN 参数化判断 的逻辑 bug；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1137\" target=\"_blank\" rel=\"noopener noreferrer\">#1137</a></li>\n<li>优化 连接池不可用、定时检查；</li>\n<li>优化 Limit + Sum/Avg/Max/Min 为嵌套查询；</li>\n<li>优化 GroupBy Page 未排序的查询；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1126\" target=\"_blank\" rel=\"noopener noreferrer\">#1126</a></li>\n</ul>\n<h2>v3.2.651</h2>\n<ul>\n<li><strong>增加 DTO 映射非导航属性的子表查询 ToList，可直接返回集合；</strong></li>\n<li>增加 Array.Any(x =&gt; x.id == a.Id &amp;&amp; ..) 表达式树解析；<a href=\"https://github.com/dotnetcore/FreeSql/issues/243\" target=\"_blank\" rel=\"noopener noreferrer\">#243</a></li>\n<li>增加 pgsql numeric -&gt; BigInteger 映射；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1100\" target=\"_blank\" rel=\"noopener noreferrer\">#1100</a></li>\n<li>增加 <a href=\"https://github.com/dotnetcore/FreeSql/issues/1108\" target=\"_blank\" rel=\"noopener noreferrer\">#1108</a> Exception 国际化；</li>\n<li>增加 DynamicFilterCustom 参数 object sender；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1113\" target=\"_blank\" rel=\"noopener noreferrer\">#1113</a></li>\n<li>增加 Fluent API 以继承接口的形式配置实体；<a href=\"https://github.com/dotnetcore/FreeSql/issues/937\" target=\"_blank\" rel=\"noopener noreferrer\">#937</a></li>\n<li>修复 Oracle AsTable 分表嵌套 SQL 拼错错误；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1098\" target=\"_blank\" rel=\"noopener noreferrer\">#1098</a></li>\n<li>修复 AsTable ManyToMany IncludeMany 无效的问题；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1103\" target=\"_blank\" rel=\"noopener noreferrer\">#1103</a></li>\n<li>修复 AsTable 分表 ToAggregate 无法得到汇总；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1115\" target=\"_blank\" rel=\"noopener noreferrer\">#1115</a></li>\n<li>修复 Repository.DataFilter 对 GlobalFilter 控制无效的 bug；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1028\" target=\"_blank\" rel=\"noopener noreferrer\">#1028</a> <a href=\"https://github.com/dotnetcore/FreeSql/issues/846\" target=\"_blank\" rel=\"noopener noreferrer\">#846</a></li>\n<li>修复 IN 查询区分 varchar/nvarchar；</li>\n<li>修复 Oracle clob 参数化类型设置问题；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1116\" target=\"_blank\" rel=\"noopener noreferrer\">#1116</a></li>\n<li>修复 MySql 子查询 Enum MapType(int) 表达式判断解析 bug；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1118\" target=\"_blank\" rel=\"noopener noreferrer\">#1118</a></li>\n<li>优化 AsTable 自动分表 Where Equal 判断；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1104\" target=\"_blank\" rel=\"noopener noreferrer\">#1104</a></li>\n<li>优化 子查询 sum/min/max/avg 默认加 isnull 防止为 NULL 情况；</li>\n<li>优化 EnableCascadeSave 级联保存执行逻辑，提升性能；</li>\n<li>优化 RawJoin 支持 FULL JOIN 等自定义联表映射；</li>\n<li>优化 IncludeMany 三级导航对象自动 _included；<a href=\"https://github.com/dotnetcore/FreeSql/issues/1113\" target=\"_blank\" rel=\"noopener noreferrer\">#1113</a></li>\n</ul>\n<h2>v3.2.100 - v3.2.640</h2>\n<ul>\n<li><strong>增加 InsertDict/UpdateDict/DeleteDict/InsertOrUpdateDict 针对字典的 CUD 方法；#481</strong></li>\n<li>增加 UseSlaveWeight 读权重设置；#1046</li>\n<li><strong>增加 [Table(AsTable = xx)] 自动分表特性，待完善；#1066</strong></li>\n<li>增加 <a href=\"https://freesql.net/guide/freesql-provider-sqlitecore.html\" target=\"_blank\" rel=\"noopener noreferrer\">FreeSql.Provider.SqliteCore</a> 支持 Sqlite 加密；</li>\n<li>增加 IList&lt;T&gt; IncludeByPropertyName 扩展方法，支持字符串参数；</li>\n<li><strong>增加 DbSet/Repository DeleteCascadeByDatabase 级联删除(基于数据库)</strong>；</li>\n<li>调整 DbSet/Repository EnableAddOrUpdateNavigateList 支持 OneToOne 级联保存、级联删除(基于对象)；</li>\n<li>修复 Delete.Where in 查询为空时，异步操作仍然执行删除；#1068 <strong>【受影响版本 v3.2.302】</strong></li>\n<li>修复 InsertOrUpdateDict 异常；#1067 <strong>【受影响版本 v3.2.301、v3.2.300、v3.2.200】</strong></li>\n<li>修复 InsertDict 部分新功能遗留问题(特别是 Oracle)；<strong>【受影响版本 v3.2.301、v3.2.300、v3.2.200】</strong></li>\n<li>修复 InsertDict/UpdateDict 等字典操作在 DbContext.Orm 下无法使用的 bug；#1064 <strong>【受影响版本 v3.2.300、v3.2.200】</strong></li>\n<li>修复 MapType 复杂表达式树解析 bug；#1062</li>\n<li>修复 UseGenerateCommandParameterWithLambda 对不可参数化的数据类型冲突的 bug；#1061 #900</li>\n<li>修复 MySql Set 类型空格处理问题；#1059</li>\n<li>修复 SaveManyAsync 多对多历史漏改的问题（同步无问题）；</li>\n<li>修复 OR 表达式处理情况；#1047</li>\n<li>修复 ClickHouse 设置 NoneParameter 会报错问题；</li>\n<li>修复 Clickhouse 连接池使用问题；#646 #968 #969 #943</li>\n<li>修复 pgsql IList -&gt; JArray 映射；#1092</li>\n<li>修复 pgsql DbFirst IsPrimary bug；</li>\n<li>修复 JsonMap 与导航属性的联表查询报错的 bug；#996</li>\n<li>修复 子查询 WhereIf 可能失败的 bug；</li>\n<li>修复 StringLength 设置后 IsNullable = false 无生效的问题；</li>\n<li>修复 UseConnectionFactory 参数化问题；</li>\n<li>修复 参数值为原始 DbParameter 时转换类型报错；</li>\n<li>修复 UseGenerateCommandParameterWithLambda 子查询 IN bug；#900</li>\n<li>修复 InsertValueSql 在仓储插入后不返回最新值；</li>\n<li>完善 SqlServer BulkCopy 插入 DateTime 最小值问题；</li>\n<li><strong>优化 导航集合属性访问，可省略 AsSelect；</strong></li>\n<li>优化 DbContext/Repository Update 实体有 ServerTime 既使无状态变化也必然更新的逻辑；</li>\n<li>优化 DbContext/Repository 插入非主键自增回填；</li>\n<li>优化 ToList&lt;Dto&gt; jsonb 映射；</li>\n<li>优化 dywhere IN 查询按 500 元素分割；#1091</li>\n<li>优化 IIF 表达式解析；</li>\n</ul>\n<h2>v3.0.100（2021/12/17）</h2>\n<ul>\n<li><strong>增加 南大通用 Gbase 国产数据库支持；</strong></li>\n<li><strong>增加 ClickHouse 数据库语法支持；</strong></li>\n<li>增加 DbContext/Repository 比较变化方法 CompareState；</li>\n<li><strong>增加 DynamicFilter Custom 自定义解析；</strong></li>\n<li>增加 ToDataTableByPropertyName 动态查询功能；</li>\n<li>优化 兼容排序 OrderBy(a =&gt; new {}) 语法；</li>\n<li>优化 pgsql jsonb 映射，支持 List，mysql limit in 子查询；</li>\n<li>优化 InsertOrUpdate&lt;&gt; 使用 InsertOrUpdate&lt;list&lt;&gt;&gt;时，提示友好异常。</li>\n<li>修复 BulkCopy 与线程事务未传播的 bug；#962</li>\n<li>修复 AsTreeCte + RereadSql 不能同时使用的 bug；#964</li>\n<li>修复 FreeSql.Generator 工具生成 model 失败 <a href=\"https://github.com/dotnetcore/FreeSql/issues/882\" target=\"_blank\" rel=\"noopener noreferrer\">#882</a></li>\n</ul>\n<blockquote>\n<p>更多历史更新日志，请访问：https://github.com/dotnetcore/FreeSql/wiki/%e6%9b%b4%e6%96%b0%e6%97%a5%e5%bf%97</p>\n</blockquote>\n",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2026-04-10T16:57:55.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "常见问题",
      "url": "https://freesql.net/reference/faq.html",
      "id": "https://freesql.net/reference/faq.html",
      "summary": "常见问题 1、如何监视 SQL？ 方法一：UseMonitorCommand + UseNoneCommandParameter 方法二：Aop.CurdBefore/CurdAfter 2、MySql Enum 映射 默认情况 c# 枚举会映射为 MySql Enum 类型，如果想映射为 int 在 FreeSqlBuilder Build 之后执行...",
      "content_html": "\n<h3>1、如何监视 SQL？</h3>\n<p>方法一：UseMonitorCommand + UseNoneCommandParameter</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">static</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\"> IFreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E06C75\"> fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> new </span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#C18401;--shiki-dark:#E5C07B\">FreeSqlBuilder</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseConnectionString</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">FreeSql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">DataType</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">MySql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"...\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseMonitorCommand</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =&gt; </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">cmd</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CommandText</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\r\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">UseNoneCommandParameter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  .</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">Build</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">();</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>方法二：Aop.CurdBefore/CurdAfter</p>\n<div class=\"language-csharp line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"csharp\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code class=\"language-csharp\"><span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">fsql</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Aop</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">CurdAfter</span><span style=\"--shiki-light:#383A42;--shiki-dark:#C678DD\"> +=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">s</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) =&gt;</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">{</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">  if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">ElapsedMilliseconds</span><span style=\"--shiki-light:#383A42;--shiki-dark:#56B6C2\"> &gt;</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> 200</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">    Console</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">.</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">WriteLine</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">$\"Sql：{</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">e</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">.</span><span style=\"--shiki-light:#383A42;--shiki-dark:#E5C07B\">Sql</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">}</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\r\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">);</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">};</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div>",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "与 EntityFramework 比较",
      "url": "https://freesql.net/reference/vs-entity-framework.html",
      "id": "https://freesql.net/reference/vs-entity-framework.html",
      "summary": "与 EntityFramework 比较 为什么要写这篇文章？ 2020 年 写下这篇完整一点的 .NET ORM 比较，为准备使用 FreeSql 的朋友解惑。 基础信息比较 FreeSql .NET ORM 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/人大金仓/神舟通用/南大通用/...",
      "content_html": "\n<p>为什么要写这篇文章？</p>\n<p>2020 年 写下这篇完整一点的 .NET ORM 比较，为准备使用 FreeSql 的朋友解惑。</p>\n<h2>基础信息比较</h2>\n<p>| 功能项        | FreeSql                                          | EFCore      |\n|</p>\n",
      "image": "https://img2020.cnblogs.com/blog/31407/202009/31407-20200914063104631-2088330287.png",
      "date_published": "2020-10-16T05:57:03.000Z",
      "date_modified": "2025-01-16T10:00:00.000Z",
      "authors": [],
      "tags": []
    }
  ]
}