From f8fd26a431777281bcdb264a07c2793c1cc70b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BE=E5=B0=8F=E5=83=A7?= Date: Sat, 3 Oct 2020 00:35:52 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=8E=20add=20master/slave=20repository?= =?UTF-8?q?=20and=20update=20documents..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 2 +- README.md | 2 +- ...56fdf.ef463ffd.js => 3ab56fdf.4389c00b.js} | 2 +- docs/404.html | 4 +- ...0b939.631677ef.js => 4c30b939.68dcfd48.js} | 2 +- docs/4dbcf072.d6bb8621.js | 1 - docs/4dbcf072.e21dadf4.js | 1 + docs/blog/index.html | 4 +- docs/blog/tags/fur/index.html | 4 +- docs/blog/tags/furos/index.html | 4 +- docs/blog/tags/index.html | 4 +- docs/blog/tags/net-5/index.html | 4 +- docs/blog/tags/net/index.html | 4 +- docs/blog/tags/netcore/index.html | 4 +- docs/blog/welcome/index.html | 10 +- docs/docs/aop/index.html | 4 +- docs/docs/auth-control/index.html | 4 +- docs/docs/author/index.html | 4 +- docs/docs/cache/index.html | 4 +- docs/docs/configuration/index.html | 4 +- docs/docs/contribute/index.html | 4 +- docs/docs/cors/index.html | 4 +- docs/docs/data-validation/index.html | 4 +- docs/docs/dbcontext-Interceptor/index.html | 4 +- docs/docs/dbcontext-add-or-update/index.html | 4 +- docs/docs/dbcontext-add/index.html | 4 +- docs/docs/dbcontext-audit/index.html | 4 +- docs/docs/dbcontext-batch/index.html | 4 +- docs/docs/dbcontext-code-first/index.html | 4 +- docs/docs/dbcontext-db-first/index.html | 4 +- docs/docs/dbcontext-delete/index.html | 4 +- docs/docs/dbcontext-filter/index.html | 4 +- docs/docs/dbcontext-function/index.html | 4 +- docs/docs/dbcontext-hight-query/index.html | 4 +- docs/docs/dbcontext-locator/index.html | 4 +- docs/docs/dbcontext-multi-database/index.html | 4 +- docs/docs/dbcontext-proc/index.html | 4 +- docs/docs/dbcontext-query/index.html | 4 +- docs/docs/dbcontext-read-write/index.html | 12 +- docs/docs/dbcontext-repository/index.html | 4 +- docs/docs/dbcontext-seed-data/index.html | 4 +- docs/docs/dbcontext-sql-proxy/index.html | 4 +- docs/docs/dbcontext-sql/index.html | 4 +- docs/docs/dbcontext-update/index.html | 4 +- docs/docs/dbcontext-view/index.html | 4 +- docs/docs/dbcontext/index.html | 4 +- docs/docs/dependency-injection/index.html | 4 +- docs/docs/deploy/index.html | 4 +- docs/docs/devops/index.html | 4 +- docs/docs/dynamic-api-controller/index.html | 4 +- docs/docs/entity/index.html | 4 +- docs/docs/event-bus/index.html | 4 +- docs/docs/friendly-exception/index.html | 4 +- docs/docs/get-start/index.html | 4 +- docs/docs/index.html | 10 +- docs/docs/job/index.html | 4 +- docs/docs/local-language/index.html | 4 +- docs/docs/logging/index.html | 4 +- docs/docs/object-mapper/index.html | 4 +- docs/docs/options/index.html | 4 +- docs/docs/performance/index.html | 4 +- docs/docs/process-service/index.html | 4 +- docs/docs/saas/index.html | 4 +- docs/docs/signalr/index.html | 4 +- docs/docs/source/index.html | 4 +- docs/docs/specification-document/index.html | 4 +- docs/docs/split-db/index.html | 4 +- docs/docs/tran/index.html | 4 +- docs/docs/unittest/index.html | 4 +- docs/docs/view-engine/index.html | 4 +- docs/img/readwrite.png | Bin 0 -> 161829 bytes docs/index.html | 4 +- .../runtime~main.597985d1.js | 2 +- ...baseAccessorServiceCollectionExtensions.cs | 9 + .../Repositories/AdjustableRepository.cs | 334 ++++++++++++++++++ .../Repositories/IAdjustableRepository.cs | 197 +++++++++++ handbook/blog/2020-08-19-welcome.mdx | 2 +- ...56fdf.ef463ffd.js => 3ab56fdf.4389c00b.js} | 2 +- handbook/build/404.html | 4 +- ...0b939.631677ef.js => 4c30b939.68dcfd48.js} | 2 +- handbook/build/4dbcf072.d6bb8621.js | 1 - handbook/build/4dbcf072.e21dadf4.js | 1 + handbook/build/blog/index.html | 4 +- handbook/build/blog/tags/fur/index.html | 4 +- handbook/build/blog/tags/furos/index.html | 4 +- handbook/build/blog/tags/index.html | 4 +- handbook/build/blog/tags/net-5/index.html | 4 +- handbook/build/blog/tags/net/index.html | 4 +- handbook/build/blog/tags/netcore/index.html | 4 +- handbook/build/blog/welcome/index.html | 10 +- handbook/build/docs/aop/index.html | 4 +- handbook/build/docs/auth-control/index.html | 4 +- handbook/build/docs/author/index.html | 4 +- handbook/build/docs/cache/index.html | 4 +- handbook/build/docs/configuration/index.html | 4 +- handbook/build/docs/contribute/index.html | 4 +- handbook/build/docs/cors/index.html | 4 +- .../build/docs/data-validation/index.html | 4 +- .../docs/dbcontext-Interceptor/index.html | 4 +- .../docs/dbcontext-add-or-update/index.html | 4 +- handbook/build/docs/dbcontext-add/index.html | 4 +- .../build/docs/dbcontext-audit/index.html | 4 +- .../build/docs/dbcontext-batch/index.html | 4 +- .../docs/dbcontext-code-first/index.html | 4 +- .../build/docs/dbcontext-db-first/index.html | 4 +- .../build/docs/dbcontext-delete/index.html | 4 +- .../build/docs/dbcontext-filter/index.html | 4 +- .../build/docs/dbcontext-function/index.html | 4 +- .../docs/dbcontext-hight-query/index.html | 4 +- .../build/docs/dbcontext-locator/index.html | 4 +- .../docs/dbcontext-multi-database/index.html | 4 +- handbook/build/docs/dbcontext-proc/index.html | 4 +- .../build/docs/dbcontext-query/index.html | 4 +- .../docs/dbcontext-read-write/index.html | 12 +- .../docs/dbcontext-repository/index.html | 4 +- .../build/docs/dbcontext-seed-data/index.html | 4 +- .../build/docs/dbcontext-sql-proxy/index.html | 4 +- handbook/build/docs/dbcontext-sql/index.html | 4 +- .../build/docs/dbcontext-update/index.html | 4 +- handbook/build/docs/dbcontext-view/index.html | 4 +- handbook/build/docs/dbcontext/index.html | 4 +- .../docs/dependency-injection/index.html | 4 +- handbook/build/docs/deploy/index.html | 4 +- handbook/build/docs/devops/index.html | 4 +- .../docs/dynamic-api-controller/index.html | 4 +- handbook/build/docs/entity/index.html | 4 +- handbook/build/docs/event-bus/index.html | 4 +- .../build/docs/friendly-exception/index.html | 4 +- handbook/build/docs/get-start/index.html | 4 +- handbook/build/docs/index.html | 10 +- handbook/build/docs/job/index.html | 4 +- handbook/build/docs/local-language/index.html | 4 +- handbook/build/docs/logging/index.html | 4 +- handbook/build/docs/object-mapper/index.html | 4 +- handbook/build/docs/options/index.html | 4 +- handbook/build/docs/performance/index.html | 4 +- .../build/docs/process-service/index.html | 4 +- handbook/build/docs/saas/index.html | 4 +- handbook/build/docs/signalr/index.html | 4 +- handbook/build/docs/source/index.html | 4 +- .../docs/specification-document/index.html | 4 +- handbook/build/docs/split-db/index.html | 4 +- handbook/build/docs/tran/index.html | 4 +- handbook/build/docs/unittest/index.html | 4 +- handbook/build/docs/view-engine/index.html | 4 +- handbook/build/img/readwrite.png | Bin 0 -> 161829 bytes handbook/build/index.html | 4 +- .../build/runtime~main.597985d1.js | 2 +- handbook/docs/dbcontext-read-write.mdx | 28 ++ handbook/docs/introduce.mdx | 2 +- handbook/static/img/readwrite.png | Bin 0 -> 161829 bytes 151 files changed, 860 insertions(+), 292 deletions(-) rename docs/{3ab56fdf.ef463ffd.js => 3ab56fdf.4389c00b.js} (99%) rename docs/{4c30b939.631677ef.js => 4c30b939.68dcfd48.js} (99%) delete mode 100644 docs/4dbcf072.d6bb8621.js create mode 100644 docs/4dbcf072.e21dadf4.js create mode 100644 docs/img/readwrite.png rename handbook/build/runtime~main.4a5fdd96.js => docs/runtime~main.597985d1.js (97%) create mode 100644 framework/Fur/DatabaseAccessor/Repositories/AdjustableRepository.cs create mode 100644 framework/Fur/DatabaseAccessor/Repositories/IAdjustableRepository.cs rename handbook/build/{3ab56fdf.ef463ffd.js => 3ab56fdf.4389c00b.js} (99%) rename handbook/build/{4c30b939.631677ef.js => 4c30b939.68dcfd48.js} (99%) delete mode 100644 handbook/build/4dbcf072.d6bb8621.js create mode 100644 handbook/build/4dbcf072.e21dadf4.js create mode 100644 handbook/build/img/readwrite.png rename docs/runtime~main.4a5fdd96.js => handbook/build/runtime~main.597985d1.js (97%) create mode 100644 handbook/static/img/readwrite.png diff --git a/README.en.md b/README.en.md index 2db2eb382f4..58f010b0394 100644 --- a/README.en.md +++ b/README.en.md @@ -76,7 +76,7 @@ ## 🍿 Docker 镜像 ```shell -docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02 +docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03 ``` ## 🥞 架构设计 diff --git a/README.md b/README.md index 2db2eb382f4..58f010b0394 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ ## 🍿 Docker 镜像 ```shell -docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02 +docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03 ``` ## 🥞 架构设计 diff --git a/docs/3ab56fdf.ef463ffd.js b/docs/3ab56fdf.4389c00b.js similarity index 99% rename from docs/3ab56fdf.ef463ffd.js rename to docs/3ab56fdf.4389c00b.js index bb48451e6ed..86be0227e60 100644 --- a/docs/3ab56fdf.ef463ffd.js +++ b/docs/3ab56fdf.4389c00b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{135:function(e,t,a){"use strict";a.d(t,"a",(function(){return u})),a.d(t,"b",(function(){return j}));var n=a(0),r=a.n(n);function b(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function c(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},O={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=o(a),m=n,j=u["".concat(c,".").concat(m)]||u[m]||O[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},76:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return u}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={slug:"welcome",title:"Fur \u4ecb\u7ecd",author:"dotnet\u4e2d\u56fd",author_title:"\u4e3a\u4e2d\u56fd .NET \u5f00\u53d1\u8005\u63d0\u4f9b\u4f18\u8d28\u7684\u8d44\u8baf\u548c\u6280\u672f\u5206\u4eab\u3002",author_url:"https://chinadot.net",author_image_url:"https://i.loli.net/2020/10/01/94AxjHp21aPKQWd.png",tags:["fur","furos",".net",".netcore",".net5"]},l={permalink:"/blog/welcome",editUrl:"https://gitee.com/monksoul/Fur/tree/main/handbook/blog/2020-08-19-welcome.mdx",source:"@site/blog\\2020-08-19-welcome.mdx",description:"=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},O={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=o(a),m=n,j=u["".concat(c,".").concat(m)]||u[m]||O[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},76:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return u}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={slug:"welcome",title:"Fur \u4ecb\u7ecd",author:"dotnet\u4e2d\u56fd",author_title:"\u4e3a\u4e2d\u56fd .NET \u5f00\u53d1\u8005\u63d0\u4f9b\u4f18\u8d28\u7684\u8d44\u8baf\u548c\u6280\u672f\u5206\u4eab\u3002",author_url:"https://chinadot.net",author_image_url:"https://i.loli.net/2020/10/01/94AxjHp21aPKQWd.png",tags:["fur","furos",".net",".netcore",".net5"]},l={permalink:"/blog/welcome",editUrl:"https://gitee.com/monksoul/Fur/tree/main/handbook/blog/2020-08-19-welcome.mdx",source:"@site/blog\\2020-08-19-welcome.mdx",description:" Page Not Found | Fur - +

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/docs/4c30b939.631677ef.js b/docs/4c30b939.68dcfd48.js similarity index 99% rename from docs/4c30b939.631677ef.js rename to docs/4c30b939.68dcfd48.js index 157c3eb855a..1002e9bcc89 100644 --- a/docs/4c30b939.631677ef.js +++ b/docs/4c30b939.68dcfd48.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{135:function(e,t,a){"use strict";a.d(t,"a",(function(){return O})),a.d(t,"b",(function(){return j}));var n=a(0),r=a.n(n);function b(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function c(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},O=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),O=o(a),m=n,j=O["".concat(c,".").concat(m)]||O[m]||u[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},81:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return O}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={id:"introduce",title:"1.1 \u4ecb\u7ecd",sidebar_label:"1.1 \u4ecb\u7ecd",slug:"/"},l={unversionedId:"introduce",id:"introduce",isDocsHomePage:!1,title:"1.1 \u4ecb\u7ecd",description:"=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},O=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),O=o(a),m=n,j=O["".concat(c,".").concat(m)]||O[m]||u[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},81:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return O}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={id:"introduce",title:"1.1 \u4ecb\u7ecd",sidebar_label:"1.1 \u4ecb\u7ecd",slug:"/"},l={unversionedId:"introduce",id:"introduce",isDocsHomePage:!1,title:"1.1 \u4ecb\u7ecd",description:"=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=o.a.createContext({}),l=function(e){var t=o.a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return o.a.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},f=o.a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),d=l(r),f=n,b=d["".concat(c,".").concat(f)]||d[f]||s[f]||a;return r?o.a.createElement(b,i(i({ref:t},p),{},{components:r})):o.a.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,c=new Array(a);c[0]=f;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;p=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=i.a.createContext({}),d=function(e){var t=i.a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},b=function(e){var t=d(e.components);return i.a.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},p=i.a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,c=e.originalType,o=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),b=d(r),p=n,f=b["".concat(o,".").concat(p)]||b[p]||s[p]||c;return r?i.a.createElement(f,a(a({ref:t},l),{},{components:r})):i.a.createElement(f,a({ref:t},l))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var c=r.length,o=new Array(c);o[0]=p;var a={};for(var u in t)hasOwnProperty.call(t,u)&&(a[u]=t[u]);a.originalType=e,a.mdxType="string"==typeof e?e:n,o[1]=a;for(var l=2;lfunction(e,t,r,{forcePrependBaseUrl:n=!1,absolute:c=!1}={}){if(!r)return r;if(r.startsWith("#"))return r;if(Object(i.b)(r))return r;if(n)return t+r;const o=r.startsWith(t)?r:t+r.replace(/^\//,"");return c?e+o:o}(t,e,r,n)}}function o(e,t={}){const{withBaseUrl:r}=c();return r(e,t)}},138:function(e,t,r){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function i(e){return void 0!==e&&!n(e)}r.d(t,"b",(function(){return n})),r.d(t,"a",(function(){return i}))},82:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return a})),r.d(t,"metadata",(function(){return u})),r.d(t,"rightToc",(function(){return l})),r.d(t,"default",(function(){return b}));var n=r(2),i=r(6),c=(r(0),r(135)),o=r(137),a={id:"dbcontext-read-write",title:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",sidebar_label:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236"},u={unversionedId:"dbcontext-read-write",id:"dbcontext-read-write",isDocsHomePage:!1,title:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",description:"8.25.1 \u8bfb\u5199\u5206\u79bb",source:"@site/docs\\dbcontext-read-write.mdx",slug:"/dbcontext-read-write",permalink:"/docs/dbcontext-read-write",editUrl:"https://gitee.com/monksoul/Fur/tree/main/handbook/docs/dbcontext-read-write.mdx",version:"current",sidebar_label:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",sidebar:"docs",previous:{title:"8.24 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143",permalink:"/docs/tran"},next:{title:"8.26 \u5206\u8868\u5206\u5e93",permalink:"/docs/split-db"}},l=[{value:"8.25.1 \u8bfb\u5199\u5206\u79bb",id:"8251-\u8bfb\u5199\u5206\u79bb",children:[{value:"8.25.1.1 \u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898",id:"82511-\u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898",children:[]},{value:"8.25.1.2 \u6ce8\u610f\u4e8b\u9879",id:"82512-\u6ce8\u610f\u4e8b\u9879",children:[]}]},{value:"8.25.2 \u5982\u4f55\u5b9e\u73b0",id:"8252-\u5982\u4f55\u5b9e\u73b0",children:[]},{value:"8.25.3 \u4e3b\u4ece\u590d\u5236",id:"8253-\u4e3b\u4ece\u590d\u5236",children:[{value:"8.25.3.1 SqlServer \u914d\u7f6e",id:"82531-sqlserver-\u914d\u7f6e",children:[]}]}],d={rightToc:l};function b(e){var t=e.components,r=Object(i.a)(e,["components"]);return Object(c.b)("wrapper",Object(n.a)({},d,r,{components:t,mdxType:"MDXLayout"}),Object(c.b)("h2",{id:"8251-\u8bfb\u5199\u5206\u79bb"},"8.25.1 \u8bfb\u5199\u5206\u79bb"),Object(c.b)("p",null,"\u5176\u5b9e\u5c31\u662f\u5c06\u6570\u636e\u5e93\u5206\u4e3a\u4e86\u4e3b\u4ece\u5e93\uff0c\u4e00\u4e2a\u4e3b\u5e93\u7528\u4e8e\u5199\u6570\u636e\uff0c\u591a\u4e2a\u4ece\u5e93\u5b8c\u6210\u8bfb\u6570\u636e\u7684\u64cd\u4f5c\uff0c\u4e3b\u4ece\u5e93\u4e4b\u95f4\u901a\u8fc7\u67d0\u79cd\u673a\u5236\u8fdb\u884c\u6570\u636e\u7684\u540c\u6b65\uff0c\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u6570\u636e\u5e93\u67b6\u6784\u3002"),Object(c.b)("img",{src:Object(o.a)("img/readwrite.png"),style:{height:300}}),Object(c.b)("h3",{id:"82511-\u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898"},"8.25.1.1 \u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898"),Object(c.b)("p",null,"\u5927\u591a\u6570\u4e92\u8054\u7f51\u4e1a\u52a1\uff0c\u5f80\u5f80\u8bfb\u591a\u5199\u5c11\uff0c\u8fd9\u65f6\u5019\uff0c\u6570\u636e\u5e93\u7684\u8bfb\u4f1a\u9996\u5148\u79f0\u4e3a\u6570\u636e\u5e93\u7684\u74f6\u9888\uff0c\u8fd9\u65f6\uff0c\u5982\u679c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7ebf\u6027\u7684\u63d0\u5347\u6570\u636e\u5e93\u7684\u8bfb\u6027\u80fd\uff0c\u6d88\u9664\u8bfb\u5199\u9501\u51b2\u7a81\u4ece\u800c\u63d0\u5347\u6570\u636e\u5e93\u7684\u5199\u6027\u80fd\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u4f7f\u7528\u201c\u5206\u7ec4\u67b6\u6784\u201d\uff08\u8bfb\u5199\u5206\u79bb\u67b6\u6784\uff09\u3002"),Object(c.b)("p",null,"\u7528\u4e00\u53e5\u8bdd\u6982\u62ec\uff0c\u8bfb\u5199\u5206\u79bb\u662f\u7528\u6765\u89e3\u51b3\u6570\u636e\u5e93\u7684\u8bfb\u6027\u80fd\u74f6\u9888\u7684\u3002"),Object(c.b)("h3",{id:"82512-\u6ce8\u610f\u4e8b\u9879"},"8.25.1.2 \u6ce8\u610f\u4e8b\u9879"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u8981\u8fdb\u884c\u533a\u5206\uff0c\u54ea\u4e9b\u662f\u8bfb\u8fde\u63a5\u6c60\uff0c\u54ea\u4e2a\u662f\u5199\u8fde\u63a5\u6c60\uff0c\u7814\u53d1\u7684\u96be\u5ea6\u4f1a\u589e\u52a0\uff1b"),Object(c.b)("li",{parentName:"ul"},"\u4e3a\u4e86\u4fdd\u8bc1\u9ad8\u53ef\u7528\uff0c\u8bfb\u8fde\u63a5\u6c60\u8981\u80fd\u591f\u5b9e\u73b0\u6545\u969c\u81ea\u52a8\u8f6c\u79fb\uff1b"),Object(c.b)("li",{parentName:"ul"},"\u4e3b\u4ece\u7684\u4e00\u81f4\u6027\u95ee\u9898\u9700\u8981\u8003\u8651\u3002")),Object(c.b)("h2",{id:"8252-\u5982\u4f55\u5b9e\u73b0"},"8.25.2 \u5982\u4f55\u5b9e\u73b0"),Object(c.b)("p",null,Object(c.b)("inlineCode",{parentName:"p"},"Fur")," \u5728\u6570\u636e\u5e93\u6a21\u5757\u8bbe\u8ba1\u4e4b\u521d\uff0c\u5c31\u8003\u8651\u4e86\u8bfb\u5199\u5206\u79bb\u8fd9\u79cd\u60c5\u51b5\uff0c\u6240\u4ee5\u4ece\u5e95\u5c42\u5c31\u652f\u6301\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u53ca\u8bfb\u5199\u64cd\u4f5c\u65b9\u6cd5\u7ea6\u675f\u3002"),Object(c.b)("h2",{id:"8253-\u4e3b\u4ece\u590d\u5236"},"8.25.3 \u4e3b\u4ece\u590d\u5236"),Object(c.b)("h3",{id:"82531-sqlserver-\u914d\u7f6e"},"8.25.3.1 ",Object(c.b)("inlineCode",{parentName:"h3"},"SqlServer")," \u914d\u7f6e"))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/blog/index.html b/docs/blog/index.html index 29548f854df..3f4f47de1f0 100644 --- a/docs/blog/index.html +++ b/docs/blog/index.html @@ -6,7 +6,7 @@ Blog | Fur - + @@ -25,7 +25,7 @@

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/docs/blog/tags/fur/index.html b/docs/blog/tags/fur/index.html index eb882e655c6..5c6d8653458 100644 --- a/docs/blog/tags/fur/index.html +++ b/docs/blog/tags/fur/index.html @@ -6,7 +6,7 @@ Posts tagged "fur" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with "fur"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/docs/blog/tags/furos/index.html b/docs/blog/tags/furos/index.html index c0b2ec20b69..db5062fc71e 100644 --- a/docs/blog/tags/furos/index.html +++ b/docs/blog/tags/furos/index.html @@ -6,7 +6,7 @@ Posts tagged "furos" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with "furos"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/docs/blog/tags/index.html b/docs/blog/tags/index.html index bec0bdb0d22..166d2125584 100644 --- a/docs/blog/tags/index.html +++ b/docs/blog/tags/index.html @@ -6,7 +6,7 @@ Tags | Fur - + @@ -23,7 +23,7 @@ - + diff --git a/docs/blog/tags/net-5/index.html b/docs/blog/tags/net-5/index.html index 54caeed384d..a605702c96d 100644 --- a/docs/blog/tags/net-5/index.html +++ b/docs/blog/tags/net-5/index.html @@ -6,7 +6,7 @@ Posts tagged ".net5" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with ".net5"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/docs/blog/tags/net/index.html b/docs/blog/tags/net/index.html index fa53565efd0..388a2a837f8 100644 --- a/docs/blog/tags/net/index.html +++ b/docs/blog/tags/net/index.html @@ -6,7 +6,7 @@ Posts tagged ".net" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with ".net"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/docs/blog/tags/netcore/index.html b/docs/blog/tags/netcore/index.html index 1af94273728..28c8e47ec77 100644 --- a/docs/blog/tags/netcore/index.html +++ b/docs/blog/tags/netcore/index.html @@ -6,7 +6,7 @@ Posts tagged ".netcore" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with ".netcore"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/docs/blog/welcome/index.html b/docs/blog/welcome/index.html index 734dc106085..779a23147f6 100644 --- a/docs/blog/welcome/index.html +++ b/docs/blog/welcome/index.html @@ -6,7 +6,7 @@ Fur 介绍 | Fur - + @@ -18,13 +18,13 @@ - +
-

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

+

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

- + @@ -36,6 +36,6 @@ - + \ No newline at end of file diff --git a/docs/docs/aop/index.html b/docs/docs/aop/index.html index 79131c5c284..5ef11745efc 100644 --- a/docs/docs/aop/index.html +++ b/docs/docs/aop/index.html @@ -6,7 +6,7 @@ 19. 拦截切面 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/auth-control/index.html b/docs/docs/auth-control/index.html index d5c5291c822..3515fe8c7ed 100644 --- a/docs/docs/auth-control/index.html +++ b/docs/docs/auth-control/index.html @@ -6,7 +6,7 @@ 13. 安全鉴权 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/author/index.html b/docs/docs/author/index.html index fab19501739..000995a1735 100644 --- a/docs/docs/author/index.html +++ b/docs/docs/author/index.html @@ -6,7 +6,7 @@ 1.3 关于作者 | Fur - + @@ -26,7 +26,7 @@

1.3 关于作者

互联网账号

  • 百小僧
  • Monk/MonkSoul

技术能力

自 2008 年 接触 IT 这个行业也有十余年了,在 后端(.NET/.NET Core/Java/PHP)、移动端(Xamarin/小程序/Java/Objective-C)、桌面端(WinForm/WPF/Electron)、前端(React/Vue/Angular/Node)等主流领域略知一二。

同时在技术培训领域也多有涉足。

职业情况

目前经营一家自己创办的软件科技公司,主要销售自主研发的 ERP 产品。

吃不起饭的时候也会接外包项目。

兴趣爱好

是个吃货,喜欢看抖音,看动漫,看美剧,看博客园、看开源中国。

对新技术颇感兴趣,喜欢开源事业,喜欢分享技术。

个人主页

https://gitee.com/monksoul

https://github.com/monksoul

- + diff --git a/docs/docs/cache/index.html b/docs/docs/cache/index.html index 4a9dc9bdee1..8066b8a673a 100644 --- a/docs/docs/cache/index.html +++ b/docs/docs/cache/index.html @@ -6,7 +6,7 @@ 12. 分布式缓存 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/configuration/index.html b/docs/docs/configuration/index.html index cf2608262c5..2338468f163 100644 --- a/docs/docs/configuration/index.html +++ b/docs/docs/configuration/index.html @@ -6,7 +6,7 @@ 3.1 配置 | Fur - + @@ -29,7 +29,7 @@
namespace Fur.Web.Entry
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
// 启动自动扫描配置文件并注入,无需手动添加配置
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, nameof(Fur))
.UseStartup<Startup>();
});
}
}

读取 emailsetting.json 配置

读取自定义配置文件和读取 appsettings.json 一致,系统会自动从多个配置文件中读取输入,如:

var smtpServer = App.Configuration["outlook:smtp:server"]; // => smtp.office365.com

3.1.5 不同环境读取

在实际应用开发中,我们可能会根据不同的环境加载不同的配置文件,如 数据库连接字符串

这时我们只需要遵循特定命名规范 {name}.{Environment}.json 即可。如:

  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json
  • emailsetting.Development.json
  • emailsetting.Staging.json
  • emailsetting.Production.json

这时,ASP.NET Core 会在应用启动时自动加载不同环境的配置文件。

3.1.6 配置更改通知(热更新

.NET Core 应用程序中,配置支持更改通知,也就是热更新操作。一旦监听到 appsetting.json 或自定义配置文件发生变动,就会触发 OnChange 方法。代码如下:

var appInfoConfiguration = App.Configuration["AppInfo"];
ChangeToken.OnChange(() => appInfoConfiguration.GetReloadToken(), () =>
{
var name = appInfoConfiguration["Name"]; // 实时的最新值
var version = appInfoConfiguration["Version"]; // 实时的最新值
});

3.1.7 配置的优缺点

优点

  • 能够在系统运行时快速读取
  • 无需额外配置

缺点

  • 存在重复读取
  • 通过硬编码字符串读取,容易出错
  • 不能设置默认值
  • 不能在运行环境中动态配置
  • 不能验证配置有效性
  • 不支持更改通知

3.1.8 配置使用场景

如果只需要一次性读取配置信息,则使用配置,否则应该使用 《3.2 选项》代替。

3.1.9 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 配置 知识可查阅 ASP.NET Core - 配置 章节。

- + diff --git a/docs/docs/contribute/index.html b/docs/docs/contribute/index.html index a8459bb2c51..037a048685d 100644 --- a/docs/docs/contribute/index.html +++ b/docs/docs/contribute/index.html @@ -6,7 +6,7 @@ 26. 贡献指南 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/cors/index.html b/docs/docs/cors/index.html index c67d47eb570..42a5407af3f 100644 --- a/docs/docs/cors/index.html +++ b/docs/docs/cors/index.html @@ -6,7 +6,7 @@ 14. CORS 跨域 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/data-validation/index.html b/docs/docs/data-validation/index.html index 9104262db22..57470136666 100644 --- a/docs/docs/data-validation/index.html +++ b/docs/docs/data-validation/index.html @@ -6,7 +6,7 @@ 7. 数据校验 | Fur - + @@ -78,7 +78,7 @@
namespace Fur.Application
{
public class FurAppService : IDynamicApiController
{
[TypeFilter(typeof(DataValidationFilter))]
public TestDto Post(TestDto testDto)
{
return testDto;
}
}
}

7.9.4 [ApiController] 控制器范围验证

[ApiController]Mvc 提供的控制器范围(含所有动作方法)的验证。

using Microsoft.AspNetCore.Mvc;
namespace Fur.Web.Entry.Controllers
{
[ApiController]
public class MvcController : Controller
{
public IActionResult Index()
{
return View();
}
}
}

7.10 MiniProfiler 查看

如下图所示:

7.10 多语言支持

文档整理中...

7.11 验证模型提供器

文档整理中...

7.12 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-Interceptor/index.html b/docs/docs/dbcontext-Interceptor/index.html index 42107513fbd..7d1ef1367a3 100644 --- a/docs/docs/dbcontext-Interceptor/index.html +++ b/docs/docs/dbcontext-Interceptor/index.html @@ -6,7 +6,7 @@ 8.23 数据库操作拦截器 | Fur - + @@ -59,7 +59,7 @@
// 提交数据库失败
public override void SaveChangesFailed(DbContextErrorEventData eventData)
{
base.SaveChangesFailed(eventData);
}
// 提交数据库失败(异步)
public override Task SaveChangesFailedAsync(DbContextErrorEventData eventData, CancellationToken cancellationToken = default)
{
return base.SaveChangesFailedAsync(eventData, cancellationToken);
}
}
}

8.23.3 注册自定义过滤器

定义好过滤器之后,我们需要在数据库上下文中注册:

services.AddSqlitePool<FurDbContext>(interceptors: new IInterceptor[] {
new SqlConnectionProfilerInterceptor(),
new DbContextSaveChangesInterceptor(),
new SqlCommandProfilerInterceptor()
});

8.23.4 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-add-or-update/index.html b/docs/docs/dbcontext-add-or-update/index.html index feebb796e32..9cfc481037b 100644 --- a/docs/docs/dbcontext-add-or-update/index.html +++ b/docs/docs/dbcontext-add-or-update/index.html @@ -6,7 +6,7 @@ 8.7 新增或更新操作 | Fur - + @@ -104,7 +104,7 @@
// 示例七
await user.InsertOrUpdateExcludeNowAsync(new[] { u=>u.Name, u=>u.Age});
// 示例八
await user.InsertOrUpdateExcludeNowAsync(new[] {"Age", "Name"});

8.5.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-add/index.html b/docs/docs/dbcontext-add/index.html index 94a41fc0f28..5591e2001ee 100644 --- a/docs/docs/dbcontext-add/index.html +++ b/docs/docs/dbcontext-add/index.html @@ -6,7 +6,7 @@ 8.5 新增操作 | Fur - + @@ -55,7 +55,7 @@
// 示例二
await repository.InsertNowAsync(new List<User> { user, user2 });
// 示例三
await repository.InsertNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

8.5.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-audit/index.html b/docs/docs/dbcontext-audit/index.html index e0ea134071c..2648423cadc 100644 --- a/docs/docs/dbcontext-audit/index.html +++ b/docs/docs/dbcontext-audit/index.html @@ -6,7 +6,7 @@ 8.21 审计日志 | Fur - + @@ -39,7 +39,7 @@
object oldValue = null;
// 如果是新增数据,则 databaseValues 为空,所以需要判断一下
if (databaseValues != null)
{
oldValue = databaseValues[propName];
}
// 插入审计日志表
dbContext.Audits.Add(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
NewValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString(); // 操作方式:新增、更新、删除
});
}
}
}
}
}
小知识

如果对性能有所要求,那么建议审计日志通过 日志组件 写入数据库,如,通过 Nlog、Log4Net 这些等:

// 插入审计日志表
dbContext.Audits.Add(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
newValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString(); // 操作方式:新增、更新、删除
});

替换为:

logger.Information(JsonConvert.SerializeObject(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
newValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString(); // 操作方式:新增、更新、删除
}));

通过上面的例子,我们就可以对数据库所有的新增、更新、删除进行监控了。

8.21.4 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-batch/index.html b/docs/docs/dbcontext-batch/index.html index e3a0f340134..8632780ca4f 100644 --- a/docs/docs/dbcontext-batch/index.html +++ b/docs/docs/dbcontext-batch/index.html @@ -6,7 +6,7 @@ 8.9 批量操作 | Fur - + @@ -34,7 +34,7 @@
// 根据条件批量更新
repository.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 });
repository.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });
await repository.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });
// 批量更新指定列
var updateColumns = new List<string> { nameof(Item.Quantity) };
var q = repository.Where(a => a.ItemId <= 500);
int affected = q.BatchUpdate(new Item { Description = "Updated" }, updateColumns);

8.9.3 批量操作性能

Operations\Rows100,000 EF100,000 EFBulk1,000,000 EFBulk
Insert38.98 s2.10 s17.99 s
Update109.25 s3.96 s31.45 s
Delete7.26 s2.04 s12.18 s
---------------------------------------------------------------
Together70.70 s5.88 s56.84 s

8.9.4 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 EFCore.BulkExtensions 知识可查阅 EFCore.BulkExtensions 开源仓库

- + diff --git a/docs/docs/dbcontext-code-first/index.html b/docs/docs/dbcontext-code-first/index.html index e9770aed188..93dcf6acbe8 100644 --- a/docs/docs/dbcontext-code-first/index.html +++ b/docs/docs/dbcontext-code-first/index.html @@ -6,7 +6,7 @@ 8.19 模型生成数据库 | Fur - + @@ -30,7 +30,7 @@
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 住址
/// </summary>
public string Address { get; set; }
}
}
实体约定

所有数据库实体必须直接或间接继承 IEntity 接口。

8.19.2.2 打开 程序包管理控制台

8.19.2.3 切换默认项目

程序包管理控制台 默认项目设置为 Fur.Database.Migrations

8.19.2.4 创建模型版本

Add-Migration v1.0.0
特别说明

v1.0.0 是此处数据库更改的版本号,可以写任何字符串,但推荐写版本号,每次 +1

最终命令如下:

PM> Add-Migration v1.0.0
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Model.Validation[10400]
Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 5.0.0-rc.1.20451.13 initialized 'FurDbContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Fur.Database.Migrations
To undo this action, use Remove-Migration.
PM>

生成成功后,Fur.Database.Migrations 项目下会新增 Migrations 文件夹(如果没有),同时本次的架构生成文件,如:

8.19.2.5 更新到数据库

Update-Database

执行该命令后,数据库就会自动根据模型生成对于的表。

小知识

如果 Update-Database 后面带字符串参数,则会自动还原数据库到指定版本,如:

Update-Database v0.0.3

将数据库还原到 v0.0.3 版本

8.19.3 更新模型

如果模型改变了,重复上面操作即可,如:

Add-Migration v1.0.1
Update-Database

8.19.4 导出 Sql

有些时候,我们没有直接更新数据库的权限,或者怕出问题,我们都会先生成 Sql 看看,这时候只需要通过 Script-Migration 导出即可,如:

Script-Migration

8.19.5 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 正向工厂 知识可查阅 EF Core - 管理数据库架构 章节。

- + diff --git a/docs/docs/dbcontext-db-first/index.html b/docs/docs/dbcontext-db-first/index.html index 09af84d6261..b31967eda12 100644 --- a/docs/docs/dbcontext-db-first/index.html +++ b/docs/docs/dbcontext-db-first/index.html @@ -6,7 +6,7 @@ 8.18 数据库生成模型 | Fur - + @@ -56,7 +56,7 @@
}
}
Fur Tools v1.0.0 全部实体生成成功!
PM>

8.13.4 命令参数配置

Fur Tools Cli 支持多个参数配置,使用方法只需要在命令后面添加即可,如:

&"../tools/cli.ps1" -Context 数据库上下文名 -ConnectionName 连接字符串Key

支持参数如下:

  • -Tables:配置要生成的数据库表,数组类型,如果为空,则生成数据库所有表和视图。如:-Tables Person,PersonDetails
  • -Context:配置数据库上下文,默认 FurDbContext,如果有多个数据库上下文,则此参数必须配置
  • -ConnectionName:配置数据库连接字符串,对于 appsetting.json 中的 Key
  • -OutputDir:生成实体代码输出目录,默认为:./Fur.Core/Entities/
  • -DbProvider:数据库提供器,默认是 Microsoft.EntityFrameworkCore.SqlServer,其他数据库请指定对应程序集
    • SqlServerMicrosoft.EntityFrameworkCore.SqlServer
    • SqliteMicrosoft.EntityFrameworkCore.Sqlite
    • CosmosMicrosoft.EntityFrameworkCore.Cosmos
    • InMemoryMicrosoft.EntityFrameworkCore.InMemory
    • MySqlPomelo.EntityFrameworkCore.MySql
    • PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL
    • OracleCitms.EntityFrameworkCore.Oracle
  • -EntryProject:Web 启用项目层名,默认 Fur.Web.Entry
  • -CoreProject:实体项目层名,默认 Fur.Core
  • -DbContextLocators:多数据库上下文定位器,默认 DbContextLocator,支持多个,如:DbContextLocator,MySqlDbContextLocator
  • -Product:解决方案默认前缀,如 Fur

8.13.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-delete/index.html b/docs/docs/dbcontext-delete/index.html index a29c56d8614..d4caaa7591c 100644 --- a/docs/docs/dbcontext-delete/index.html +++ b/docs/docs/dbcontext-delete/index.html @@ -6,7 +6,7 @@ 8.8 删除操作 | Fur - + @@ -71,7 +71,7 @@
// 示例五
await entity.FakeDeleteAsync();
// 示例六
await repository.UpdateIncludeAsync(user, u => u.IsDeleted);

8.8.9 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-filter/index.html b/docs/docs/dbcontext-filter/index.html index b44252f9140..29e10c53c19 100644 --- a/docs/docs/dbcontext-filter/index.html +++ b/docs/docs/dbcontext-filter/index.html @@ -6,7 +6,7 @@ 8.22 实体/全局查询筛选器 | Fur - + @@ -38,7 +38,7 @@
// 创建表达式元素
var parameter = Expression.Parameter(metadata.ClrType, "u");
var properyName = Expression.Constant(nameof(Entity.IsDeleted));
var propertyValue = Expression.Constant(false);
// 构建表达式 u => EF.Property<bool>(u, "IsDeleted") == false
var expressionBody = Expression.Equal(Expression.Call(typeof(EF), nameof(EF.Property), new[] { typeof(bool) }, parameter, properyName), propertyValue);
var expression = Expression.Lambda(expressionBody, parameter);
return expression;
}
}
}
小建议

如果对动态构建 LambdaExpression 不熟悉的朋友,可以使用 System.Linq.Dynamic.Corehttps://github.com/zzzprojects/System.Linq.Dynamic.Core

8.22.3 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-function/index.html b/docs/docs/dbcontext-function/index.html index 829a627217a..b97baaf8fb2 100644 --- a/docs/docs/dbcontext-function/index.html +++ b/docs/docs/dbcontext-function/index.html @@ -6,7 +6,7 @@ 8.14 函数操作 | Fur - + @@ -50,7 +50,7 @@
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity(typeof(F_Person)).HasNoKey();
modelBuilder.HasDbFunction(() => GetPersons(default));
}
}
}

8.14.5.4 在 Linq 中使用

IQueryable<F_Person> query = _repository.DynamicDbContext.GetPersons(1);
var result = query.Where(u => u.Name.Equals("Fur")).ToList();

最终生成 Sql

SELECT [g].Id, [g].Name, [g].Age, [g].Address
FROM dbo.GetPersons(1) AS [g]
WHERE [g].Name == N'Fur';

8.14.6 在 EF Core 内置函数

EF Core 为我们提供了很多常用的内置函数,可以在 Lambda 条件中使用,主要是通过 EF.Functions 调用,如:

_repository.Where(u => EF.Functions.DateDiffHour(u.CreatedDt, DateTime.Now) > 8).FirstOrDefault();

这个语句使用了 EF.Functions.DateDiffHour 最终生成的 Sql 如下:

SELECT TOP(1) [a].*
FROM [dbo].[TEST] AS [a]
WHERE DATEDIFF(HOUR, [a].[CREATED_DT], GETDATE()) > 8

EF Core 内置函数就不一一列出了,可以通过 EF.Functions 查看更多,如果不能满足自己的需求,那么可以自定义 Linq 标量函数

8.14.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-hight-query/index.html b/docs/docs/dbcontext-hight-query/index.html index 30926e7904d..50227c26e9f 100644 --- a/docs/docs/dbcontext-hight-query/index.html +++ b/docs/docs/dbcontext-hight-query/index.html @@ -6,7 +6,7 @@ 8.11 高级查询操作 | Fur - + @@ -57,7 +57,7 @@
namespace Fur.Core
{
public class Person : Entity, IEntityTypeBuilder<Person>
{
public string Name { get; set; }
/// <summary>
/// 配置实体关系
/// </summary>
/// <param name="entityBuilder"></param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
public void Configure(EntityTypeBuilder<City> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.ToSqlQuery(
@"select * from dbo.person.2020-09-19
union all
select * from dbo.person.2020-09-20");
}
}
}
var posts = repository.Where(u => u.Id > 10).ToList();

8.11.12 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-locator/index.html b/docs/docs/dbcontext-locator/index.html index d2b8b4cb851..92ce6a4528b 100644 --- a/docs/docs/dbcontext-locator/index.html +++ b/docs/docs/dbcontext-locator/index.html @@ -6,7 +6,7 @@ 8.2 数据库上下文定位器 | Fur - + @@ -28,7 +28,7 @@
namespace Fur.Core
{
public sealed class FurDbContextLocator : IDbContextLocator
{
}
}

8.2.4 默认数据库上下文定位器

Fur 框架中已经提供了 DbContextLocator 默认数据库上下文定位器,所以默认数据库上下文只需继承 AppDbContext<TDbContext> 即可。

AppDbContext<TDbContext> 定义代码如下:

using Fur.DependencyInjection;
using Microsoft.EntityFrameworkCore;
namespace Fur.DatabaseAccessor
{
/// <summary>
/// 默认应用数据库上下文
/// </summary>
/// <typeparam name="TDbContext">数据库上下文</typeparam>
[NonBeScan]
public abstract class AppDbContext<TDbContext> : AppDbContext<TDbContext, DbContextLocator>
where TDbContext : DbContext
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="options"></param>
public AppDbContext(DbContextOptions<TDbContext> options) : base(options)
{
}
}
}

8.2.5 数据库上下文定位器支持对象

目前数据库上下文支持以下多个对象:

  • AppDbContext<TEntity, TDbContextLocator>:数据上下文
  • IRepository<TEntity, TDbContextLocator:实体仓储
  • ISqlRepository<TDbContextLocator>: Sql 操作仓储
  • Func<Type, DbContext>:依赖注入获取数据库上下文
  • Entity<Tkey, TDbContextLocator> :实体配置
  • EntityBase<Tkey, TDbContextLocator1, ... TDbContextLocator8>:实体配置
  • EntityNotKey<TDbContextLocator1, ... TDbContextLocator8>:无键实体配置
  • IEntitySeedData<TEntity, TDbContextLocator1, ... TDbContextLocator8>:种子数据配置
  • IEntityTypeBuilder<TEntity, TDbContextLocator1, ... TDbContextLocator8>:实体类型构建器
  • IModelBuilderFilter<TDbContextLocator1, ... TDbContextLocator8>:模型构建筛选器
  • [QueryableFunction(DbContextLocators=Type[])]:查询函数

8.2.6 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-multi-database/index.html b/docs/docs/dbcontext-multi-database/index.html index d4e30f4406d..37badafd178 100644 --- a/docs/docs/dbcontext-multi-database/index.html +++ b/docs/docs/dbcontext-multi-database/index.html @@ -6,7 +6,7 @@ 8.17 多数据库操作 | Fur - + @@ -47,7 +47,7 @@
/// <summary>
/// 数据库 SqlServer
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="options">数据库上下文选项构建器</param>
private static void ConfigureSqlServer(string connectionString, DbContextOptionsBuilder options)
{
options.UseSqlServer(connectionString, options =>
{
// 配置全局切割 Sql,而不是生成单个复杂 sql
//options.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
// 配置 code first 程序集
options.MigrationsAssembly("Fur.Database.Migrations");
//options.EnableRetryOnFailure();
//options.MigrationsHistoryTable("__EFMigrationsHistory", "fur");
});
}
}
}

8.17.4 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-proc/index.html b/docs/docs/dbcontext-proc/index.html index e0dc2172865..db7db78dc5a 100644 --- a/docs/docs/dbcontext-proc/index.html +++ b/docs/docs/dbcontext-proc/index.html @@ -6,7 +6,7 @@ 8.13 存储过程操作 | Fur - + @@ -119,7 +119,7 @@
// 获取 RETURN 返回值
var reval = result.ReturnValue;
// 获取返回结果集
var (list1,list2) = result.Result;
关于异步

Fur 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

8.13.3 关于 [DbParameter]

[DbParameter] 特性是用来标注 Sql函数存储过程 参数的,可配置属性:

  • Direction:设置参数方向,ParameterDirection 枚举类型,默认 ParameterDirection.Input
  • DbType:设置参数类型,DbType 枚举类型,无默认
  • Size:设置参数长度的,int 类型

其中 Direction 属性是默认构造函数参数。

8.13.4 关于 ProcedureOutputResult

ProcedureOutputResultProcedureOutputResult<TResult> 是复杂存储过程执行返回模型类,有以下属性:

  • OutputValues:多个输出值,ProcedureOutputValue 类型
  • ReturnValue:返回值,object 类型
  • Result:结果集,非泛型版本是 DataSet类型,否则是 泛型类型

8.13.5 存储过程参数

所有 sql 参数都支持四种方式:

  • DbParameter[]:数组类型
  • new {}:匿名类型
  • new Class{}:强类型类型(支持复杂存储过程参数)
  • Dictionary<string,object> 类型

8.13.6 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-query/index.html b/docs/docs/dbcontext-query/index.html index 267aa327564..bd0b0718bf5 100644 --- a/docs/docs/dbcontext-query/index.html +++ b/docs/docs/dbcontext-query/index.html @@ -6,7 +6,7 @@ 8.10 查询操作 | Fur - + @@ -138,7 +138,7 @@
// 示例二
_testRepository.Where(u => u.Name.EndWith("Fur"));
// 示例三
_testRepository.Where(u => u.Name.Contains("Fur"));

8.10.6.9 Case When

数据库中的 Case When 实际上对应的是我们程序中的 三元表达式 ,也就是使用 三元表达式 即可自动生成 Case When 语句。

8.10.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-read-write/index.html b/docs/docs/dbcontext-read-write/index.html index 5f6102e0c60..5e7d2d38c88 100644 --- a/docs/docs/dbcontext-read-write/index.html +++ b/docs/docs/dbcontext-read-write/index.html @@ -4,9 +4,9 @@ -8.25 读写分离/主从复制 | Fur +8.25 读写分离/主从复制 | Fur - + @@ -20,13 +20,13 @@ - + +

8.25 读写分离/主从复制

8.25.1 读写分离

其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。

8.25.1.1 解决了什么问题

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。

用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。

8.25.1.2 注意事项

  • 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加;
  • 为了保证高可用,读连接池要能够实现故障自动转移;
  • 主从的一致性问题需要考虑。

8.25.2 如何实现

Fur 在数据库模块设计之初,就考虑了读写分离这种情况,所以从底层就支持动态切换数据库上下文及读写操作方法约束。

8.25.3 主从复制

8.25.3.1 SqlServer 配置

- + @@ -40,6 +40,6 @@ - + \ No newline at end of file diff --git a/docs/docs/dbcontext-repository/index.html b/docs/docs/dbcontext-repository/index.html index bfde0de99af..a4c24c076cd 100644 --- a/docs/docs/dbcontext-repository/index.html +++ b/docs/docs/dbcontext-repository/index.html @@ -6,7 +6,7 @@ 8.4 关于仓储 | Fur - + @@ -33,7 +33,7 @@
// 其他更多数据库一样的操作

另外任何仓储或实体配置都支持多个数据库同时操作

仓储方式

IRepository<Person, MsSqlDbContextLocator> mssqlRepository
ISqlRepository<MsSqlDbContextLocator> mssqlRepository;

动态 sql 方式

"select * from person".Change<MsSqlDbContextLocator>().SqlQuery();

实体配置方式

public class User:Entity<MsSqlDbContextLocator, MySqlDbContextLocator>
{
}

Sql 代理方式

[SqlFunction("funcName", DbContextLocator = typeof(MySqlDbContextLocator))]
int GetAge(int id);

Linq 中方式

[QueryableFunction("funcName","dbo", DbContextLocator = typeof(MySqlDbContextLocator))]
string GetName()=> throw Oops.Oh("不支持该数据库操作");

8.4.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-seed-data/index.html b/docs/docs/dbcontext-seed-data/index.html index dc94051d1b8..c0d94eff856 100644 --- a/docs/docs/dbcontext-seed-data/index.html +++ b/docs/docs/dbcontext-seed-data/index.html @@ -6,7 +6,7 @@ 8.20 实体种子数据 | Fur - + @@ -32,7 +32,7 @@
namespace Fur.Application
{
public class PersonSeedData : IEntitySeedData<Person>
{
// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}

8.20.3 导航属性

通常我们的实体有 一对多多对多等外键关系,那么我们需要单独为每一个实体添加数据种子,而不是直接写在主表中。

8.20.4 多个数据库种子数据

Fur 提供泛型的方式支持多个数据库种子数据设定,如:

using Fur.DatabaseAccessor;
using System.Collections.Generic;
namespace Fur.Application
{
public class PersonSeedData : IEntitySeedData<Person, MySqlDbContextLocator, SqliteDbContextLocator>
{
// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}

上面的例子表示同时为 MySqlDbContextSqliteDbContext 创建种子数据。

8.20.5 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 数据种子 知识可查阅 EF Core - 数据种子设定 章节。

- + diff --git a/docs/docs/dbcontext-sql-proxy/index.html b/docs/docs/dbcontext-sql-proxy/index.html index 2c6f735359a..449b285e1b0 100644 --- a/docs/docs/dbcontext-sql-proxy/index.html +++ b/docs/docs/dbcontext-sql-proxy/index.html @@ -6,7 +6,7 @@ 8.16 Sql 高级代理 | Fur - + @@ -76,7 +76,7 @@
namespace Fur.Application
{
public class ISql : ISqlDispatchProxy
{
[SqlFunction("FN_Name")] // 标量函数
string GetValue(MyParam dto);
[SqlProcedure("FN_Name")] // 表值函数
List<Person> GetPersons(int id);
}
}
补充说明

Sql 代理会自动判断返回值然后自动执行特定函数类型。

8.16.6 为什么用它?

通过上面的例子大家就可以了解,这种方式操作 sql 非常简单,而且极易维护。大家不用去关系返回值,关心用哪个方法,所有东西会自动给你处理好。

所以,如果需要用 Sql 操作,推荐使用 Sql 高级代理。

8.16.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-sql/index.html b/docs/docs/dbcontext-sql/index.html index 35f371b260e..e148003d0eb 100644 --- a/docs/docs/dbcontext-sql/index.html +++ b/docs/docs/dbcontext-sql/index.html @@ -6,7 +6,7 @@ 8.15 Sql 操作 | Fur - + @@ -173,7 +173,7 @@
// 不再举例子。。。。。。
补充说明

不管是那种方式操作 Sql ,方法名参数都是一致的,如:

  • SqlQuery
  • SqlQueryAsync
  • SqlQueries
  • SqlQueriesAsync
  • SqlNonQuery
  • SqlNonQueryAsync
  • SqlScalar
  • SqlScalarAsync
  • SqlProcedureQuery
  • SqlProcedureQueryAsync
  • SqlProcedureQueries
  • SqlProcedureQueriesAsync
  • SqlProcedureScalar
  • SqlProcedureScalarAsync
  • SqlProcedureNonQuery
  • SqlProcedureNonQueryAsync
  • SqlProcedureOutput
  • SqlProcedureOutputAsync
  • SqlFunctionScalar
  • SqlFunctionScalarAsync
  • SqlFunctionQuery
  • SqlFunctionQuery

8.15.6 IRepository 操作

IRepository 也能操作 sql,调用方法也是和上面一致的,如:

var dataTable = repository.Sql().SqlQuery("select * from person");
特别说明

由于篇幅有限,不再列举所有例子。

8.15.7 IRepository<TEntity> 操作

IRepository<TEntity> 也能操作 sql,调用方法也是和上面一致的,如:

var dataTable = personRepository.SqlQuery("select * from person");
特别说明

由于篇幅有限,不再列举所有例子。

8.15.8 关于 Sql 参数

所有 sql存储过程函数 参数都支持四种方式:

  • DbParameter[]:数组类型
  • new {}:匿名类型
  • new Class{}:强类型类型(支持复杂存储过程参数)
  • Dictionary<string,object> 类型
小知识

建议除了复杂的存储过程(带 OUTPUT/RETURN)的以外,所有参数建议使用 new {} 匿名类型,如果需要动态参数,则可以使用 Dictionary<string,object> 类型。

8.15.9 多数据库 Sql 操作 💯 💛

Fur 框架拥有非常灵活的多数据库操作方式,只需通过多数据库上下文定位器即可动态切换数据库。

8.15.9.1 懒人无敌 🐮 方式

var dataTable = "select * from person".Change<MySqlDbContextLocator>().SqlQuery();
var persons = "select * from person whre id > @id".Change<SqliteDbContextLocator>().SqlQuery<Person>();
补充说明

懒人方式 只需要通过 Change<TDbContextLocator> 方式即可动态切换数据库。

8.15.9.2 ISqlRepository 方式

只需要通过 ISqlRepository<TDbContextLocator> 注入或通过 sqlRepository.Change<TDbContextLocator>() 切换。

8.15.9.3 IRepository 方式

只需要通过 repository.Change<TDbContextLocator>() 获取即可。

8.15.9.4 IRepository<TEntity> 方式

只需要通过 IRepository<TEntity, TDbContextLocator> 注入或通过 personRepository.Change<TEntity, TDbContextLocator>() 切换。

8.15.10 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-update/index.html b/docs/docs/dbcontext-update/index.html index 075b46edc59..78cee3b6bc1 100644 --- a/docs/docs/dbcontext-update/index.html +++ b/docs/docs/dbcontext-update/index.html @@ -6,7 +6,7 @@ 8.6 更新操作 | Fur - + @@ -198,7 +198,7 @@
// 示例二
await repository.UpdateNowAsync(new List<User> { user, user2 });
// 示例三
await repository.UpdateNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

8.6.15 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext-view/index.html b/docs/docs/dbcontext-view/index.html index d455cd193ea..8180dd8e15b 100644 --- a/docs/docs/dbcontext-view/index.html +++ b/docs/docs/dbcontext-view/index.html @@ -6,7 +6,7 @@ 8.12 视图操作 | Fur - + @@ -34,7 +34,7 @@
public FurService(IRepository<V_Person> repository)
{
// 初始化只读仓储
_readableRepository = repository.Constraint<IReadableRepository<V_Person>>();
}
/// <summary>
/// 读取视图
/// </summary>
/// <returns></returns>
public async Task<List<V_Person>> GetVPerson()
{
var list = await _readableRepository.AsAsyncEnumerable();
return list;
}
}
}
小知识

通过 .Constraint<TEntity,TDbContextLocator> 方法可以将仓储约束为特定仓储,如只读仓储,可读可写仓储,只新增仓储等。

8.12.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/dbcontext/index.html b/docs/docs/dbcontext/index.html index 8fd9b0fc7a6..6a121c1b294 100644 --- a/docs/docs/dbcontext/index.html +++ b/docs/docs/dbcontext/index.html @@ -6,7 +6,7 @@ 8.1 数据库上下文 | Fur - + @@ -34,7 +34,7 @@
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("数据库连接字符串");
}
}
}

8.1.6 数据库上下文定义位置

特别注意

Fur 框架中,数据库上下文需定义在 Fur.EntityFramework.Core 中,且每一个数据库上下文都必须拥有唯一的 DbContextLocator 定位器

8.1.7 动态数据库上下文对象

Fur 框架中,数据库上下文是定义在 Fur.EntityFramework.Core 项目层,并且该层不被 Fur.ApplicationFur.Core 等层引用。

所以就不能直接在 Fur.Application 项目层直接使用 Fur.EntityFramework.Core 定义的数据库上下文。

Fur 为了解决这个问题,提供了两种方式处理:

  • respository.DbContext :当前数据库上下文对象,返回是 DbContext 抽象类型
  • respository.DynamicDbContext:当前数据库上下文对象,返回的是 dynamic 类型

如果你只是想使用 DbContext 的功能,直接使用 respository.DbContext 即可,如:

respository.DbContext.SaveChanges();

如果你想能够获取具体的数据库上下文类型,如 MyDbContext,那么使用 respository.DynamicDbContext 就可以获取到具体的 MyDbContext 类型。如:

var persons = respository.DynamicDbContext.Persons.Find(1);
var users = respository.DynamicDbContext.Users;

这样就可以直接操作 MyDbContext 定义的属性和方法了。

8.1.8 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 数据库上下文 知识可查阅 EF Core - 配置 DbContext 章节。

- + diff --git a/docs/docs/dependency-injection/index.html b/docs/docs/dependency-injection/index.html index 8331cac7f8e..9491c64f304 100644 --- a/docs/docs/dependency-injection/index.html +++ b/docs/docs/dependency-injection/index.html @@ -6,7 +6,7 @@ 10. 依赖注入/控制反转 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/deploy/index.html b/docs/docs/deploy/index.html index 968b5b082c5..d840c8cc266 100644 --- a/docs/docs/deploy/index.html +++ b/docs/docs/deploy/index.html @@ -6,7 +6,7 @@ 23. 托管部署 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/devops/index.html b/docs/docs/devops/index.html index 16f06c5a879..b5fe645b7f6 100644 --- a/docs/docs/devops/index.html +++ b/docs/docs/devops/index.html @@ -6,7 +6,7 @@ 24. 持续部署集成 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/dynamic-api-controller/index.html b/docs/docs/dynamic-api-controller/index.html index 1d963a4f752..0070fdaf78d 100644 --- a/docs/docs/dynamic-api-controller/index.html +++ b/docs/docs/dynamic-api-controller/index.html @@ -6,7 +6,7 @@ 4. 动态 WebAPI | Fur - + @@ -75,7 +75,7 @@
namespace Fur.Web.Entry.Controllers
{
public class MvcController : ControllerBase
{
public string Get()
{
return nameof(Fur);
}
}
}
注意事项

启用该配置后,如果 Mvc 控制器 没有任何 [Route] 特性,但是贴了 [ApiController] 特性将会报错。原因是 [ApiController] 特性内部做了路由特性检测。所以建议使用 [ApiDataValidation] 代替。

查看 ASP.NET Core - ApiBehaviorApplicationModelProvider 源码

4.11 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/entity/index.html b/docs/docs/entity/index.html index af7ccb434c9..ea98330a6df 100644 --- a/docs/docs/entity/index.html +++ b/docs/docs/entity/index.html @@ -6,7 +6,7 @@ 8.3 数据库实体 | Fur - + @@ -39,7 +39,7 @@
// 配置数据库实体
public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasKey(u => u.Id);
entityBuilder.HasIndex(u => u.Name);
}
}
}

8.3.3.2 在任何实例类中配置

using Fur.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
namespace Fur.Core
{
public class SomeClass : IEntityTypeBuilder<User>
{
public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasKey(u => u.Id);
entityBuilder.HasIndex(u => u.Name);
}
}
}

如,上面例子,通过 SomeClass 配置 User 数据库实体。

8.3.4 数据库实体配置说明

Fur 框架会自动扫描所有继承 IEntity 接口的类进行 DbSet<TEntity> 注册,也就是实现自动配置 DbContextOnModelCreating

如果需要跳过自动注册,只需要贴 [NonAutomatic][NonBeScan] 特性即可。一旦贴了次特性,那么就需要手动配置 DbContextOnModelCreating

8.3.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/event-bus/index.html b/docs/docs/event-bus/index.html index ea6ee6df9a6..8b19c233207 100644 --- a/docs/docs/event-bus/index.html +++ b/docs/docs/event-bus/index.html @@ -6,7 +6,7 @@ 17. 事件总线 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/friendly-exception/index.html b/docs/docs/friendly-exception/index.html index 3a2e066a660..c9238b70e27 100644 --- a/docs/docs/friendly-exception/index.html +++ b/docs/docs/friendly-exception/index.html @@ -6,7 +6,7 @@ 6. 友好异常处理 | Fur - + @@ -59,7 +59,7 @@
namespace Fur.Application
{
public class FurAppService : IDynamicApiController
{
[IfException(ErrorCodes.z1000, ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
[IfException(ErrorCodes.x1001, "格式化参数1", "格式化参数2", ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
[IfException(ErrorCodes.x1000, "格式化参数1", "格式化参数2")]
[IfException(ErrorCodes.SERVER_ERROR, "格式化参数1", "格式化参数2")]
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh(ErrorCodes.z1000, id, 3);
}
return id;
}
}
}
格式化流程

如果消息内容中包含格式化占位符但未指定格式化参数,那么会查找异常所在方法是否贴有 [IfException] 特性且含有格式化参数,接着就会查找 Oops.Oh 中指定的 格式化参数

6.11 异常消息优先级

[ErrorCodeItemMetadata] -> appsettings.json -> [IfException](低 -> 高)

  • [IfException] 会覆盖 appsettings.json 定义的状态码消息。
  • appsettings.json 会覆盖 [ErrorCodeItemMetadata] 定义的消息。

6.12 多语言支持

文档整理中...

6.13 异常模型提供器

文档整理中...

6.14 Fur 内置异常

  • EFCoreErrorCodesEF Core 操作异常
    • DataNotFound:未找到数据
    • KeyNotSet:没有设置主键

6.15 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/get-start/index.html b/docs/docs/get-start/index.html index 955583b41d3..ce0455b19fb 100644 --- a/docs/docs/get-start/index.html +++ b/docs/docs/get-start/index.html @@ -6,7 +6,7 @@ 2. 一分钟入门 | Fur - + @@ -45,7 +45,7 @@
/// <summary>
/// 姓名
/// </summary>
[StringLength(32, MinimumLength = 2)]
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
}
}

说好一分钟入门,你们用了多长时间。😁

- + diff --git a/docs/docs/index.html b/docs/docs/index.html index 750a816fcd1..eb1fa951060 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -6,7 +6,7 @@ 1.1 介绍 | Fur - + @@ -20,13 +20,13 @@ - +
-

1.1 介绍

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

+

1.1 介绍

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

- + @@ -40,6 +40,6 @@ - + \ No newline at end of file diff --git a/docs/docs/job/index.html b/docs/docs/job/index.html index a9b106cadd9..59587908382 100644 --- a/docs/docs/job/index.html +++ b/docs/docs/job/index.html @@ -6,7 +6,7 @@ 21. 任务调度 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/local-language/index.html b/docs/docs/local-language/index.html index 0c9022022c9..6728e7d1e1c 100644 --- a/docs/docs/local-language/index.html +++ b/docs/docs/local-language/index.html @@ -6,7 +6,7 @@ 15. 多语言处理 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/logging/index.html b/docs/docs/logging/index.html index 586a73b170d..fba12eaa1a1 100644 --- a/docs/docs/logging/index.html +++ b/docs/docs/logging/index.html @@ -6,7 +6,7 @@ 18. 日志记录 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/object-mapper/index.html b/docs/docs/object-mapper/index.html index e70354b67e6..830645e1077 100644 --- a/docs/docs/object-mapper/index.html +++ b/docs/docs/object-mapper/index.html @@ -6,7 +6,7 @@ 11. 对象数据映射 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/options/index.html b/docs/docs/options/index.html index 572af3a586e..cfa3fb78bf1 100644 --- a/docs/docs/options/index.html +++ b/docs/docs/options/index.html @@ -6,7 +6,7 @@ 3.2 选项 | Fur - + @@ -41,7 +41,7 @@
public void OnListener(AppInfoOptions options, IConfiguration configuration)
{
var name = options.Name; // 实时的最新值
var version = options.Version; // 实时的最新值
}
public void PostConfigure(AppInfoOptions options, IConfiguration configuration)
{
}
}
特别说明

IConfigurableOptionsListener<TOptions> 继承自 IConfigurableOptions<TOptions>

3.3.9 选项的优缺点

优点

  • 强类型配置
  • 提供多种读取方式
  • 支持热加载
  • 支持设置默认值/后期配置
  • 支持在运行环境中动态配置
  • 支持验证配置有效性
  • 支持更改通知
  • 支持命名选项

缺点

  • 需要定义对应类型
  • 需要在启动时注册

3.3.10 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 选项 知识可查阅 ASP.NET Core - 选项 章节。

- + diff --git a/docs/docs/performance/index.html b/docs/docs/performance/index.html index 2e20162d23b..a91e01e1bbf 100644 --- a/docs/docs/performance/index.html +++ b/docs/docs/performance/index.html @@ -6,7 +6,7 @@ 25.2 性能测试 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/process-service/index.html b/docs/docs/process-service/index.html index bd2402aa961..b8897bfd868 100644 --- a/docs/docs/process-service/index.html +++ b/docs/docs/process-service/index.html @@ -6,7 +6,7 @@ 20. 进程服务 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/saas/index.html b/docs/docs/saas/index.html index e61629d02e7..7b307bcc079 100644 --- a/docs/docs/saas/index.html +++ b/docs/docs/saas/index.html @@ -6,7 +6,7 @@ 9. SaaS 多租户 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/signalr/index.html b/docs/docs/signalr/index.html index 5a1c1fc5119..d6a26e29b3e 100644 --- a/docs/docs/signalr/index.html +++ b/docs/docs/signalr/index.html @@ -6,7 +6,7 @@ 22. 即时通讯 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/source/index.html b/docs/docs/source/index.html index a1468665c57..eaa1e96bed6 100644 --- a/docs/docs/source/index.html +++ b/docs/docs/source/index.html @@ -6,7 +6,7 @@ 1.2 源码结构 | Fur - + @@ -58,7 +58,7 @@
#prefer fields not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_field = false:suggestion
#prefer methods not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_method = false:suggestion
#prefer properties not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_property = false:suggestion
# Add file header
file_header_template = -----------------------------------------------------------------------------\nFur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。\nCopyright © 2020 Fur, Baiqian Co.,Ltd.\n\n框架名称:Fur\n框架作者:百小僧\n框架版本:1.0.0\n源码地址:Gitee:https://gitee.com/monksoul/Fur \n Github:https://github.com/monksoul/Fur \n开源协议:Apache-2.0(http://www.apache.org/licenses/LICENSE-2.0)\n-----------------------------------------------------------------------------

1.2.4 Fur 核心层

Fur 核心层是 Fur 框架的中心,也是 Fur 能够支撑起来的必备层。

源码结构:

Fur
├─Fur.csproj
├─Fur.csproj.user
├─FurStartup.cs
├─ViewEngine
| ├─IViewEngine.cs
| ├─ViewEngine.cs
| ├─Templates
| | ├─IViewEngineCompiledTemplate.cs
| | ├─IViewEngineTemplate.cs
| | ├─ViewEngineCompiledTemplate.cs
| | └ViewEngineTemplate.cs
| ├─Options
| | └ViewEngineCompilationOptions.cs
| ├─Models
| | └AnonymousTypeWrapper.cs
| ├─Exceptions
| | ├─ViewEngineCompilationException.cs
| | └ViewEngineException.cs
| ├─Compilations
| | ├─IViewEngineCompilationOptionsBuilder.cs
| | └ViewEngineCompilationOptionsBuilder.cs
├─UnifyResult
| ├─Providers
| | ├─IUnifyResultProvider.cs
| | └RESTfulResultProvider.cs
| ├─Models
| | └RESTfulResult.cs
| ├─Filters
| | └SuccessUnifyResultFilter.cs
| ├─Extensions
| | └UnifyResultServiceCollectionExtensions.cs
├─SpecificationDocument
| ├─Options
| | └SpecificationDocumentSettingsOptions.cs
| ├─Models
| | ├─GroupOrder.cs
| | ├─SpecificationOpenApiInfo.cs
| | ├─SpecificationOpenApiSecurityRequirementItem.cs
| | └SpecificationOpenApiSecurityScheme.cs
| ├─Extensions
| | ├─SpecificationDocumentApplicationBuilderExtensions.cs
| | └SpecificationDocumentServiceCollectionExtensions.cs
| ├─Builders
| | └SpecificationDocumentBuilder.cs
| ├─Assets
| | └index-mini-profiler.html
├─ObjectMapper
| ├─Extensions
| | └ObjectMapperServiceCollectionExtensions.cs
| ├─Dependencies
| | └IObjectMapper.cs
├─LinqBuilder
| ├─Visitors
| | └ParameterReplaceExpressionVisitor.cs
| ├─Extensions
| | └LinqExtensions.cs
| ├─Builders
| | └LinqExpression.cs
├─FriendlyException
| ├─Oops.cs
| ├─Providers
| | └IErrorCodeTypeProvider.cs
| ├─Options
| | └ErrorCodeMessageSettingsOptions.cs
| ├─Models
| | └MethodIfException.cs
| ├─Filters
| | └FriendlyExceptionFilter.cs
| ├─Extensions
| | └FriendlyExceptionServiceCollectionExtensions.cs
| ├─Attributes
| | ├─ErrorCodeItemMetadataAttribute.cs
| | ├─ErrorCodeTypeAttribute.cs
| | └IfExceptionAttribute.cs
├─DynamicApiController
| ├─Penetrates.cs
| ├─Providers
| | └DynamicApiControllerFeatureProvider.cs
| ├─Options
| | └DynamicApiControllerSettingsOptions.cs
| ├─Models
| | └ParameterRouteTemplate.cs
| ├─Extensions
| | └DynamicApiControllerServiceCollectionExtensions.cs
| ├─Enums
| | └ApiSeats.cs
| ├─Dependencies
| | └IDynamicApiController.cs
| ├─Conventions
| | └DynamicApiControllerApplicationModelConvention.cs
| ├─Attributes
| | ├─ApiDescriptionSettingsAttribute.cs
| | ├─ApiSeatAttribute.cs
| | └DynamicApiControllerAttribute.cs
├─DependencyInjection
| ├─Extensions
| | └DependencyInjectionServiceCollectionExtensions.cs
| ├─Enums
| | ├─InjectionOptions.cs
| | ├─InjectionScopeOptions.cs
| | └RegisterType.cs
| ├─Dependencies
| | ├─IDependencyInjection.cs
| | ├─IScopedInjection.cs
| | ├─ISingletonInjection.cs
| | ├─ITransientInjection.cs
| | ├─Aop
| | | └IDispatchProxy.cs
| ├─Attributes
| | ├─InjectionAttribute.cs
| | └SkipScanAttribute.cs
├─DataValidation
| ├─Validators
| | └DataValidator.cs
| ├─Providers
| | └IValidationMessageTypeProvider.cs
| ├─Options
| | └ValidationTypeMessageSettingsOptions.cs
| ├─Models
| | └DataValidationResult.cs
| ├─Filters
| | └DataValidationFilter.cs
| ├─Extensions
| | ├─DataValidationExtensions.cs
| | └DataValidationServiceCollectionExtensions.cs
| ├─Enums
| | ├─ValidationPattern.cs
| | └ValidationTypes.cs
| ├─Attributes
| | ├─DataValidationAttribute.cs
| | ├─NonValidationAttribute.cs
| | ├─ValidationItemMetadataAttribute.cs
| | ├─ValidationMessageAttribute.cs
| | ├─ValidationMessageTypeAttribute.cs
| | └ValidationTypeAttribute.cs
├─DatabaseAccessor
| ├─UnitOfWork
| | ├─Filters
| | | └UnitOfWorkFilter.cs
| | ├─Attributes
| | | ├─NonTransactAttribute.cs
| | | └UnitOfWorkAttribute.cs
| ├─Repositories
| | ├─EFCoreRepository.cs
| | ├─IRepository.cs
| | ├─ISqlRepository.cs
| | ├─SqlRepository.cs
| | ├─Implantations
| | | ├─DeletableRepository.cs
| | | ├─InsertableRepository.cs
| | | ├─OperableRepository.cs
| | | ├─ReadableRepository.cs
| | | ├─SqlExecutableRepository.cs
| | | ├─SqlReaderRepository.cs
| | | ├─UpdateableRepository.cs
| | | └WritableRepository.cs
| | ├─Dependencies
| | | ├─IDeletableRepository.cs
| | | ├─IInsertableRepository.cs
| | | ├─IOperableRepository.cs
| | | ├─IReadableRepository.cs
| | | ├─IRepositoryDependency.cs
| | | ├─ISqlExecutableRepository.cs
| | | ├─ISqlReaderRepository.cs
| | | ├─IUpdateableRepository.cs
| | | └IWritableRepository.cs
| ├─Pools
| | ├─DbContextPool.cs
| | └IDbContextPool.cs
| ├─Options
| | └DatabaseAccessorSettingsOptions.cs
| ├─MultiTenants
| | ├─Providers
| | | └IMultiTenantProvider.cs
| | ├─Locators
| | | └MultiTenantDbContextLocator.cs
| | ├─Enums
| | | └MultiTenantOptions.cs
| | ├─Entities
| | | └Tenant.cs
| ├─Models
| | ├─DatabaseProvider.cs
| | ├─PagedList.cs
| | ├─ProcedureOutputResult.cs
| | └ProcedureOutputValue.cs
| ├─Locators
| | ├─DbContextLocator.cs
| | └IDbContextLocator.cs
| ├─Interceptors
| | ├─DbContextSaveChangesInterceptor.cs
| | ├─SqlCommandProfilerInterceptor.cs
| | └SqlConnectionProfilerInterceptor.cs
| ├─Helpers
| | └DbHelpers.cs
| ├─Extensions
| | ├─DatabaseAccessorServiceCollectionExtensions.cs
| | ├─PagedQueryableExtensions.cs
| | ├─Repositories
| | | ├─IEntityDbContextLocatorExtensions.cs
| | | ├─IEntityExtensions.cs
| | | └SqlExtensions.cs
| | ├─DatabaseProvider
| | | ├─Penetrates.cs
| | | ├─SqliteServiceCollectionExtensions.cs
| | | └SqlServerServiceCollectionExtensions.cs
| | ├─DatabaseFacade
| | | ├─DbDataConvertExtensions.cs
| | | ├─DbObjectExtensions.cs
| | | └SqlAdoNetExtensions.cs
| ├─Enums
| | ├─DbFunctionType.cs
| | ├─EFCoreErrorCodes.cs
| | └ManualOptions.cs
| ├─Entities
| | ├─Dependencies
| | | ├─Entity.cs
| | | ├─EntityBase.cs
| | | ├─EntityNotKey.cs
| | | ├─IEntity.cs
| | | └IEntityNotKey.cs
| | ├─Configures
| | | ├─IEntitySeedData.cs
| | | ├─IEntityTypeBuilder.cs
| | | ├─IModelBuilderDependency.cs
| | | └IModelBuilderFilter.cs
| | ├─Attributes
| | | ├─FakeDeleteAttribute.cs
| | | ├─NonAutomaticAttribute.cs
| | | └QueryableFunctionAttribute.cs
| ├─Contexts
| | ├─AppDbContext.cs
| | ├─Builders
| | | ├─AppDbContextBuilder.cs
| | | ├─Models
| | | | └DbContextCorrelationType.cs
| | ├─Attributes
| | | └DbContextAttribute.cs
| ├─Attributes
| | └DbParameterAttribute.cs
| ├─Advances
| | ├─Proxies
| | | └SqlDispatchProxy.cs
| | ├─Models
| | | └SqlProxyMethod.cs
| | ├─Dependencies
| | | └ISqlDispatchProxy.cs
| | ├─Attributes
| | | ├─SqlExecuteAttribute.cs
| | | ├─SqlFunctionAttribute.cs
| | | ├─SqlProcedureAttribute.cs
| | | ├─Basics
| | | | ├─SqlObjectProxyAttribute.cs
| | | | ├─SqlProxyAttribute.cs
| | | | └SqlSentenceProxyAttribute.cs
├─CorsAccessor
| ├─Options
| | └CorsAccessorSettingsOptions.cs
| ├─Extensions
| | ├─CorsAccessorApplicationBuilderExtensions.cs
| | └CorsAccessorServiceCollectionExtensions.cs
├─ConfigurableOptions
| ├─Options
| | └IConfigurableOptions.cs
| ├─Extensions
| | └ConfigurableOptionsServiceCollectionExtensions.cs
| ├─Attributes
| | └OptionsSettingsAttribute.cs
├─Authorization
| ├─Penetrates.cs
| ├─Requirements
| | └AuthorizePolicyRequirement.cs
| ├─Providers
| | └AuthorizePolicyProvider.cs
| ├─Options
| | └JWTSettingsOptions.cs
| ├─Handlers
| | └AuthorizePolicyHandler.cs
| ├─Extensions
| | └PolicyAuthorizationServiceCollectionExtensions.cs
| ├─Attributes
| | └AuthorizePolicyAttribute.cs
├─App
| ├─App.cs
| ├─Startups
| | ├─AppStartup.cs
| | └HostingStartup.cs
| ├─Options
| | └AppSettingsOptions.cs
| ├─Filters
| | └StartupFilter.cs
| ├─Extensions
| | ├─AppApplicationBuilderExtensions.cs
| | ├─AppServiceCollectionExtensions.cs
| | └ObjectExtensions.cs
| ├─Attributes
| | └StartupAttribute.cs

1.2.5 Fur.Application 业务应用层

Fur.Application 业务应用层是最常用的层,几乎所有的业务代码都在这个层中编写。

源码结构:

Fur.Application
├─Fur.Application.Core.csproj
├─Fur.Application.Core.xml
└FurApplicationStartup.cs

1.2.6 Fur.Core 仓储实体层

Fur.Core 主要是存储自定义仓储和定义实体的层。

源码结构:

Fur.Core
├─Fur.Core.csproj
└FurCoreStartup.cs

1.2.7 Fur.Database.Migrations 数据库架构维护层

Fur.Database.Migrations 主要是用来存放 Database FirstCode First 生成的维护文件。

源码结构:

Fur.Database.Migrations
└Fur.Database.Migrations.csproj

1.2.8 Fur.EntityFramework.Core 数据库上下文配置层

Fur.EntityFramework.Core 主要是用来配置数据库上下文和其他数据库相关配置信息的。

源码结构:

Fur.EntityFramework.Core
└Fur.EntityFramework.Core.csproj

1.2.9 Fur.Web.Core 应用核心层

Fur.Web.Core 主要是用来配置 Web 入口一些代码,如 FilterMiddlewares 等。

源码结构:

Fur.Web.Core
├─Fur.Web.Core.xml
└FurWebCoreStartup.cs

1.2.10 Fur.Web.Entry 应用入口层

Fur.Web.Entry 是我们的应用层,也就是我们的 Web 项目层,发布层。

源码结构:

Fur.Web.Entry
├─appsettings.Development.json
├─appsettings.json
├─Fur.Web.Entry.csproj
├─Fur.Web.Entry.csproj.user
├─Fur.Web.Entry.xml
├─Program.cs
├─Startup.cs
├─wwwroot
| └README.md
├─Properties
| └launchSettings.json
├─Controllers
- + diff --git a/docs/docs/specification-document/index.html b/docs/docs/specification-document/index.html index 3136b707ab1..e8705b0999c 100644 --- a/docs/docs/specification-document/index.html +++ b/docs/docs/specification-document/index.html @@ -6,7 +6,7 @@ 5. 规范化接口文档 | Fur - + @@ -51,7 +51,7 @@
"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": null
}
}
}
]
}
}
}

5.5.12 在线测试

如下图所示:

5.5.13 性能监视 MiniProfiler

规范化文档默认集成了 MiniProfiler 第三方性能组件,通过该组件可以方便查看请求性能、异常堆栈、数据库操作等信息。默认在 Swagger 首页左上角显示。

如下图所示:

小提示

也可以通过 appsetting.jsonAppSettings:InjectMiniProfiler 设为 false 关闭。

5.5.14 定义接口输出类型

using Fur.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
namespace Fur.Application
{
public class FurAppService : IDynamicApiController
{
[ProducesResponseType(201, Type = typeof(TestDto))]
[ProducesResponseType(400)]
public string Get()
{
return nameof(Fur);
}
}
}

如下图所示:

5.6 SpecificationDocumentSettings 配置

除了上述例子外,Fur 提供了一些配置选项,如:

  • DocumentTitle:文档标题,string,默认 Specification Api Document
  • DefaultGroupName:默认分组名,string,默认 Default
  • EnableAuthorized:是否启用权限控制,bool,默认 true
  • FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false
  • RoutePrefix:规范化文档地址,string,默认 string
  • DocExpansionState:文档显示方式,DocExpansion,默认 List,取值:
    • List:列表式(展开子类),默认值
    • Full:完全展开
    • None:列表式(不展开子类)
  • XmlComments:程序集注释描述文件名(可带 .xmlstring,默认 Fur.Application, Fur.Web.Entry, Fur.Web.Core
  • GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
  • SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 []

5.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/docs/docs/split-db/index.html b/docs/docs/split-db/index.html index bc8014df7a6..379344dd281 100644 --- a/docs/docs/split-db/index.html +++ b/docs/docs/split-db/index.html @@ -6,7 +6,7 @@ 8.26 分表分库 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/tran/index.html b/docs/docs/tran/index.html index 76b65843dba..b1b01481df0 100644 --- a/docs/docs/tran/index.html +++ b/docs/docs/tran/index.html @@ -6,7 +6,7 @@ 8.24 事务和工作单元 | Fur - + @@ -29,7 +29,7 @@
var blogs = _testRepository.Entity
.OrderBy(b => b.Url)
.ToList();
// 提交事务
transaction.Commit();
}
catch (Exception)
{
// 回滚事务
transaction.RollBack();
}
}

8.24.4 工作单元特性说明

8.24.4.1 [UnitOfWork]

[UnitOfWork] 特性用来标记事务信息,如作用范围,隔离级别等。

  • Enabled:是否启动工作单元,默认 true
  • ScopeOption:定义事务范围行为,默认 TransactionScopeOption.Required
  • IsolationLevel:设置事务隔离级别,默认 IsolationLevel.ReadCommitted;
  • AsyncFlowOption:允许跨线程连续任务的事务流,如有异步操作需开启该选项,默认开启
特别注意

一旦方法贴了 [UnitOfWork(false)] 特性后,那么该方法不再启用工作单元模式,也就是不包含事务,也不会自动提交数据库。慎用!

8.24.4.2 [NonTransact]

一但方法或类贴了 [NonTransact] 特性,那么将关闭事务操作,但是还是会自动保存数据库到数据。

8.24.5 常见错误

  • A TransactionScope must be disposed on the same thread that it was created.

只需要在当前操作方法上贴 [NonTransact] 特性即可。

8.24.6 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 事务 知识可查阅 EF Core - 使用事务 章节。

- + diff --git a/docs/docs/unittest/index.html b/docs/docs/unittest/index.html index 6b699ef1d57..6f1ddbcadc8 100644 --- a/docs/docs/unittest/index.html +++ b/docs/docs/unittest/index.html @@ -6,7 +6,7 @@ 25.1 单元测试 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/docs/view-engine/index.html b/docs/docs/view-engine/index.html index 613e2cc9c46..b99fd027084 100644 --- a/docs/docs/view-engine/index.html +++ b/docs/docs/view-engine/index.html @@ -6,7 +6,7 @@ 16. 视图引擎 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/docs/img/readwrite.png b/docs/img/readwrite.png new file mode 100644 index 0000000000000000000000000000000000000000..84e5d64901e71621aeb7cc947e259b2a6a052070 GIT binary patch literal 161829 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

-xv(a_PFfSU0t)597 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%0A1@= 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

g#KsSJGEdk5t{O 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

Nma9@Jm6Q~m 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index b37cdd18158..69fd44d1076 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,7 +6,7 @@ Fur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。 Fur | Fur - + @@ -22,7 +22,7 @@

Fur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。

[object Object]

.NET 5 新起点

.NET 5 是 .NET 的重要且令人兴奋的新方向。你会看到 .NET 变得更加简单,但也有更广泛的功能和实用程序。所有新的开发和功能都将是 .NET 5 的一部分,包括新的 C# 版本

[object Object]

“六级” 架构

Fur 在设计之初就秉承着 “六极” :极易入门、极速开发、极少依赖、极少配置、极其灵活、极易维护 的设计思想,在架构设计上做了大量的优化,支持各个能力阶层技术员极速上手。

[object Object]

冲一杯咖啡的时间

Fur 除了独具创新的设计理念和灵活的架构设计以外,同时还结合了主流的敏捷开发模式打造的一款极速开发框架。只需冲制一杯咖啡的时间便可完成工作

- + diff --git a/handbook/build/runtime~main.4a5fdd96.js b/docs/runtime~main.597985d1.js similarity index 97% rename from handbook/build/runtime~main.4a5fdd96.js rename to docs/runtime~main.597985d1.js index 14eb444a032..c276d530062 100644 --- a/handbook/build/runtime~main.4a5fdd96.js +++ b/docs/runtime~main.597985d1.js @@ -1 +1 @@ -!function(e){function f(f){for(var c,r,t=f[0],n=f[1],o=f[2],u=0,l=[];u), typeof(EFCoreRepository<>)); + // 注册主从库仓储 + services.TryAddScoped(typeof(IAdjustableRepository<,>), typeof(AdjustableRepository<,>)); + services.TryAddScoped(typeof(IAdjustableRepository<,,>), typeof(AdjustableRepository<,,>)); + services.TryAddScoped(typeof(IAdjustableRepository<,,,>), typeof(AdjustableRepository<,,,>)); + services.TryAddScoped(typeof(IAdjustableRepository<,,,,>), typeof(AdjustableRepository<,,,,>)); + services.TryAddScoped(typeof(IAdjustableRepository<,,,,,>), typeof(AdjustableRepository<,,,,,>)); + services.TryAddScoped(typeof(IAdjustableRepository<,,,,,,>), typeof(AdjustableRepository<,,,,,,>)); + services.TryAddScoped(typeof(IAdjustableRepository<,,,,,,,>), typeof(AdjustableRepository<,,,,,,,>)); + // 注册非泛型仓储 services.TryAddScoped(); diff --git a/framework/Fur/DatabaseAccessor/Repositories/AdjustableRepository.cs b/framework/Fur/DatabaseAccessor/Repositories/AdjustableRepository.cs new file mode 100644 index 00000000000..263898f2608 --- /dev/null +++ b/framework/Fur/DatabaseAccessor/Repositories/AdjustableRepository.cs @@ -0,0 +1,334 @@ +// ----------------------------------------------------------------------------- +// Fur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。 +// Copyright © 2020 Fur, Baiqian Co.,Ltd. +// +// 框架名称:Fur +// 框架作者:百小僧 +// 框架版本:1.0.0 +// 官方网站:https://chinadot.net +// 源码地址:Gitee:https://gitee.com/monksoul/Fur +// Github:https://github.com/monksoul/Fur +// 开源协议:Apache-2.0(http://www.apache.org/licenses/LICENSE-2.0) +// ----------------------------------------------------------------------------- + +using Fur.DependencyInjection; + +namespace Fur.DatabaseAccessor +{ + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + [SkipScan] + public class AdjustableRepository : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) + { + _repository = repository; + } + + /// + /// 获取主库仓储 + /// + /// 实体类型 + /// + public virtual IRepository Master() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change(); + } + + /// + /// 获取从库仓储 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave1() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + [SkipScan] + public class AdjustableRepository + : AdjustableRepository + , IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) : base(repository) + { + _repository = repository; + } + + /// + /// 获取从库仓储2 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave2() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + [SkipScan] + public class AdjustableRepository + : AdjustableRepository + , IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) : base(repository) + { + _repository = repository; + } + + /// + /// 获取从库仓储3 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave3() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + [SkipScan] + public class AdjustableRepository + : AdjustableRepository + , IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) : base(repository) + { + _repository = repository; + } + + /// + /// 获取从库仓储4 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave4() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + [SkipScan] + public class AdjustableRepository + : AdjustableRepository + , IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + where TSlaveDbContextLocator5 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) : base(repository) + { + _repository = repository; + } + + /// + /// 获取从库仓储5 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave5() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + [SkipScan] + public class AdjustableRepository + : AdjustableRepository + , IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + where TSlaveDbContextLocator5 : class, IDbContextLocator + where TSlaveDbContextLocator6 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) : base(repository) + { + _repository = repository; + } + + /// + /// 获取从库仓储6 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave6() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + [SkipScan] + public class AdjustableRepository + : AdjustableRepository + , IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + where TSlaveDbContextLocator5 : class, IDbContextLocator + where TSlaveDbContextLocator6 : class, IDbContextLocator + where TSlaveDbContextLocator7 : class, IDbContextLocator + { + /// + /// 非泛型仓储 + /// + private readonly IRepository _repository; + + /// + /// 构造函数 + /// + /// 非泛型仓储 + public AdjustableRepository(IRepository repository) : base(repository) + { + _repository = repository; + } + + /// + /// 获取从库仓储7 + /// + /// 实体类型 + /// + public virtual IReadableRepository Slave7() + where TEntity : class, IEntityDependency, new() + { + return _repository.Change().Constraint>(); + } + } +} \ No newline at end of file diff --git a/framework/Fur/DatabaseAccessor/Repositories/IAdjustableRepository.cs b/framework/Fur/DatabaseAccessor/Repositories/IAdjustableRepository.cs new file mode 100644 index 00000000000..33cce4fac2d --- /dev/null +++ b/framework/Fur/DatabaseAccessor/Repositories/IAdjustableRepository.cs @@ -0,0 +1,197 @@ +// ----------------------------------------------------------------------------- +// Fur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。 +// Copyright © 2020 Fur, Baiqian Co.,Ltd. +// +// 框架名称:Fur +// 框架作者:百小僧 +// 框架版本:1.0.0 +// 官方网站:https://chinadot.net +// 源码地址:Gitee:https://gitee.com/monksoul/Fur +// Github:https://github.com/monksoul/Fur +// 开源协议:Apache-2.0(http://www.apache.org/licenses/LICENSE-2.0) +// ----------------------------------------------------------------------------- + +namespace Fur.DatabaseAccessor +{ + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + public interface IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + { + /// + /// 获取主库仓储 + /// + /// 实体类型 + /// + IRepository Master() + where TEntity : class, IEntityDependency, new(); + + /// + /// 获取从库仓储 + /// + /// 实体类型 + /// + IReadableRepository Slave1() + where TEntity : class, IEntityDependency, new(); + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + public interface IAdjustableRepository + : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + { + /// + /// 获取从库仓储2 + /// + /// 实体类型 + /// + IReadableRepository Slave2() + where TEntity : class, IEntityDependency, new(); + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + public interface IAdjustableRepository + : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + { + /// + /// 获取从库仓储3 + /// + /// 实体类型 + /// + IReadableRepository Slave3() + where TEntity : class, IEntityDependency, new(); + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + public interface IAdjustableRepository + : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + { + /// + /// 获取从库仓储4 + /// + /// 实体类型 + /// + IReadableRepository Slave4() + where TEntity : class, IEntityDependency, new(); + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + public interface IAdjustableRepository + : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + where TSlaveDbContextLocator5 : class, IDbContextLocator + { + /// + /// 获取从库仓储5 + /// + /// 实体类型 + /// + IReadableRepository Slave5() + where TEntity : class, IEntityDependency, new(); + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + public interface IAdjustableRepository + : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + where TSlaveDbContextLocator5 : class, IDbContextLocator + where TSlaveDbContextLocator6 : class, IDbContextLocator + { + /// + /// 获取从库仓储6 + /// + /// 实体类型 + /// + IReadableRepository Slave6() + where TEntity : class, IEntityDependency, new(); + } + + /// + /// 可调配仓储 + /// + /// 主库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + /// 从库 + public interface IAdjustableRepository + : IAdjustableRepository + where TMasterDbContextLocator : class, IDbContextLocator + where TSlaveDbContextLocator1 : class, IDbContextLocator + where TSlaveDbContextLocator2 : class, IDbContextLocator + where TSlaveDbContextLocator3 : class, IDbContextLocator + where TSlaveDbContextLocator4 : class, IDbContextLocator + where TSlaveDbContextLocator5 : class, IDbContextLocator + where TSlaveDbContextLocator6 : class, IDbContextLocator + where TSlaveDbContextLocator7 : class, IDbContextLocator + { + /// + /// 获取从库仓储7 + /// + /// 实体类型 + /// + IReadableRepository Slave7() + where TEntity : class, IEntityDependency, new(); + } +} \ No newline at end of file diff --git a/handbook/blog/2020-08-19-welcome.mdx b/handbook/blog/2020-08-19-welcome.mdx index 0fe509054e0..e5e5c5eaf66 100644 --- a/handbook/blog/2020-08-19-welcome.mdx +++ b/handbook/blog/2020-08-19-welcome.mdx @@ -77,7 +77,7 @@ import useBaseUrl from "@docusaurus/useBaseUrl"; ## 🍿 Docker 镜像 ```shell -docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02 +docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03 ``` ## 🥞 架构设计 diff --git a/handbook/build/3ab56fdf.ef463ffd.js b/handbook/build/3ab56fdf.4389c00b.js similarity index 99% rename from handbook/build/3ab56fdf.ef463ffd.js rename to handbook/build/3ab56fdf.4389c00b.js index bb48451e6ed..86be0227e60 100644 --- a/handbook/build/3ab56fdf.ef463ffd.js +++ b/handbook/build/3ab56fdf.4389c00b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{135:function(e,t,a){"use strict";a.d(t,"a",(function(){return u})),a.d(t,"b",(function(){return j}));var n=a(0),r=a.n(n);function b(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function c(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},O={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=o(a),m=n,j=u["".concat(c,".").concat(m)]||u[m]||O[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},76:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return u}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={slug:"welcome",title:"Fur \u4ecb\u7ecd",author:"dotnet\u4e2d\u56fd",author_title:"\u4e3a\u4e2d\u56fd .NET \u5f00\u53d1\u8005\u63d0\u4f9b\u4f18\u8d28\u7684\u8d44\u8baf\u548c\u6280\u672f\u5206\u4eab\u3002",author_url:"https://chinadot.net",author_image_url:"https://i.loli.net/2020/10/01/94AxjHp21aPKQWd.png",tags:["fur","furos",".net",".netcore",".net5"]},l={permalink:"/blog/welcome",editUrl:"https://gitee.com/monksoul/Fur/tree/main/handbook/blog/2020-08-19-welcome.mdx",source:"@site/blog\\2020-08-19-welcome.mdx",description:"=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},O={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=o(a),m=n,j=u["".concat(c,".").concat(m)]||u[m]||O[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},76:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return u}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={slug:"welcome",title:"Fur \u4ecb\u7ecd",author:"dotnet\u4e2d\u56fd",author_title:"\u4e3a\u4e2d\u56fd .NET \u5f00\u53d1\u8005\u63d0\u4f9b\u4f18\u8d28\u7684\u8d44\u8baf\u548c\u6280\u672f\u5206\u4eab\u3002",author_url:"https://chinadot.net",author_image_url:"https://i.loli.net/2020/10/01/94AxjHp21aPKQWd.png",tags:["fur","furos",".net",".netcore",".net5"]},l={permalink:"/blog/welcome",editUrl:"https://gitee.com/monksoul/Fur/tree/main/handbook/blog/2020-08-19-welcome.mdx",source:"@site/blog\\2020-08-19-welcome.mdx",description:" Page Not Found | Fur - +

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/handbook/build/4c30b939.631677ef.js b/handbook/build/4c30b939.68dcfd48.js similarity index 99% rename from handbook/build/4c30b939.631677ef.js rename to handbook/build/4c30b939.68dcfd48.js index 157c3eb855a..1002e9bcc89 100644 --- a/handbook/build/4c30b939.631677ef.js +++ b/handbook/build/4c30b939.68dcfd48.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{135:function(e,t,a){"use strict";a.d(t,"a",(function(){return O})),a.d(t,"b",(function(){return j}));var n=a(0),r=a.n(n);function b(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function c(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},O=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),O=o(a),m=n,j=O["".concat(c,".").concat(m)]||O[m]||u[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},81:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return O}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={id:"introduce",title:"1.1 \u4ecb\u7ecd",sidebar_label:"1.1 \u4ecb\u7ecd",slug:"/"},l={unversionedId:"introduce",id:"introduce",isDocsHomePage:!1,title:"1.1 \u4ecb\u7ecd",description:"=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=r.a.createContext({}),o=function(e){var t=r.a.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},O=function(e){var t=o(e.components);return r.a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=r.a.forwardRef((function(e,t){var a=e.components,n=e.mdxType,b=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),O=o(a),m=n,j=O["".concat(c,".").concat(m)]||O[m]||u[m]||b;return a?r.a.createElement(j,i(i({ref:t},p),{},{components:a})):r.a.createElement(j,i({ref:t},p))}));function j(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var b=a.length,c=new Array(b);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;pfunction(e,t,a,{forcePrependBaseUrl:n=!1,absolute:b=!1}={}){if(!a)return a;if(a.startsWith("#"))return a;if(Object(r.b)(a))return a;if(n)return t+a;const c=a.startsWith(t)?a:t+a.replace(/^\//,"");return b?e+c:c}(t,e,a,n)}}function c(e,t={}){const{withBaseUrl:a}=b();return a(e,t)}},138:function(e,t,a){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!n(e)}a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}))},81:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return l})),a.d(t,"rightToc",(function(){return p})),a.d(t,"default",(function(){return O}));var n=a(2),r=a(6),b=(a(0),a(135)),c=a(137),i={id:"introduce",title:"1.1 \u4ecb\u7ecd",sidebar_label:"1.1 \u4ecb\u7ecd",slug:"/"},l={unversionedId:"introduce",id:"introduce",isDocsHomePage:!1,title:"1.1 \u4ecb\u7ecd",description:"=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=o.a.createContext({}),l=function(e){var t=o.a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return o.a.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},f=o.a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),d=l(r),f=n,b=d["".concat(c,".").concat(f)]||d[f]||s[f]||a;return r?o.a.createElement(b,i(i({ref:t},p),{},{components:r})):o.a.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,c=new Array(a);c[0]=f;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var p=2;p=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=i.a.createContext({}),d=function(e){var t=i.a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},b=function(e){var t=d(e.components);return i.a.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},p=i.a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,c=e.originalType,o=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),b=d(r),p=n,f=b["".concat(o,".").concat(p)]||b[p]||s[p]||c;return r?i.a.createElement(f,a(a({ref:t},l),{},{components:r})):i.a.createElement(f,a({ref:t},l))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var c=r.length,o=new Array(c);o[0]=p;var a={};for(var u in t)hasOwnProperty.call(t,u)&&(a[u]=t[u]);a.originalType=e,a.mdxType="string"==typeof e?e:n,o[1]=a;for(var l=2;lfunction(e,t,r,{forcePrependBaseUrl:n=!1,absolute:c=!1}={}){if(!r)return r;if(r.startsWith("#"))return r;if(Object(i.b)(r))return r;if(n)return t+r;const o=r.startsWith(t)?r:t+r.replace(/^\//,"");return c?e+o:o}(t,e,r,n)}}function o(e,t={}){const{withBaseUrl:r}=c();return r(e,t)}},138:function(e,t,r){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function i(e){return void 0!==e&&!n(e)}r.d(t,"b",(function(){return n})),r.d(t,"a",(function(){return i}))},82:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return a})),r.d(t,"metadata",(function(){return u})),r.d(t,"rightToc",(function(){return l})),r.d(t,"default",(function(){return b}));var n=r(2),i=r(6),c=(r(0),r(135)),o=r(137),a={id:"dbcontext-read-write",title:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",sidebar_label:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236"},u={unversionedId:"dbcontext-read-write",id:"dbcontext-read-write",isDocsHomePage:!1,title:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",description:"8.25.1 \u8bfb\u5199\u5206\u79bb",source:"@site/docs\\dbcontext-read-write.mdx",slug:"/dbcontext-read-write",permalink:"/docs/dbcontext-read-write",editUrl:"https://gitee.com/monksoul/Fur/tree/main/handbook/docs/dbcontext-read-write.mdx",version:"current",sidebar_label:"8.25 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",sidebar:"docs",previous:{title:"8.24 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143",permalink:"/docs/tran"},next:{title:"8.26 \u5206\u8868\u5206\u5e93",permalink:"/docs/split-db"}},l=[{value:"8.25.1 \u8bfb\u5199\u5206\u79bb",id:"8251-\u8bfb\u5199\u5206\u79bb",children:[{value:"8.25.1.1 \u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898",id:"82511-\u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898",children:[]},{value:"8.25.1.2 \u6ce8\u610f\u4e8b\u9879",id:"82512-\u6ce8\u610f\u4e8b\u9879",children:[]}]},{value:"8.25.2 \u5982\u4f55\u5b9e\u73b0",id:"8252-\u5982\u4f55\u5b9e\u73b0",children:[]},{value:"8.25.3 \u4e3b\u4ece\u590d\u5236",id:"8253-\u4e3b\u4ece\u590d\u5236",children:[{value:"8.25.3.1 SqlServer \u914d\u7f6e",id:"82531-sqlserver-\u914d\u7f6e",children:[]}]}],d={rightToc:l};function b(e){var t=e.components,r=Object(i.a)(e,["components"]);return Object(c.b)("wrapper",Object(n.a)({},d,r,{components:t,mdxType:"MDXLayout"}),Object(c.b)("h2",{id:"8251-\u8bfb\u5199\u5206\u79bb"},"8.25.1 \u8bfb\u5199\u5206\u79bb"),Object(c.b)("p",null,"\u5176\u5b9e\u5c31\u662f\u5c06\u6570\u636e\u5e93\u5206\u4e3a\u4e86\u4e3b\u4ece\u5e93\uff0c\u4e00\u4e2a\u4e3b\u5e93\u7528\u4e8e\u5199\u6570\u636e\uff0c\u591a\u4e2a\u4ece\u5e93\u5b8c\u6210\u8bfb\u6570\u636e\u7684\u64cd\u4f5c\uff0c\u4e3b\u4ece\u5e93\u4e4b\u95f4\u901a\u8fc7\u67d0\u79cd\u673a\u5236\u8fdb\u884c\u6570\u636e\u7684\u540c\u6b65\uff0c\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u6570\u636e\u5e93\u67b6\u6784\u3002"),Object(c.b)("img",{src:Object(o.a)("img/readwrite.png"),style:{height:300}}),Object(c.b)("h3",{id:"82511-\u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898"},"8.25.1.1 \u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898"),Object(c.b)("p",null,"\u5927\u591a\u6570\u4e92\u8054\u7f51\u4e1a\u52a1\uff0c\u5f80\u5f80\u8bfb\u591a\u5199\u5c11\uff0c\u8fd9\u65f6\u5019\uff0c\u6570\u636e\u5e93\u7684\u8bfb\u4f1a\u9996\u5148\u79f0\u4e3a\u6570\u636e\u5e93\u7684\u74f6\u9888\uff0c\u8fd9\u65f6\uff0c\u5982\u679c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7ebf\u6027\u7684\u63d0\u5347\u6570\u636e\u5e93\u7684\u8bfb\u6027\u80fd\uff0c\u6d88\u9664\u8bfb\u5199\u9501\u51b2\u7a81\u4ece\u800c\u63d0\u5347\u6570\u636e\u5e93\u7684\u5199\u6027\u80fd\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u4f7f\u7528\u201c\u5206\u7ec4\u67b6\u6784\u201d\uff08\u8bfb\u5199\u5206\u79bb\u67b6\u6784\uff09\u3002"),Object(c.b)("p",null,"\u7528\u4e00\u53e5\u8bdd\u6982\u62ec\uff0c\u8bfb\u5199\u5206\u79bb\u662f\u7528\u6765\u89e3\u51b3\u6570\u636e\u5e93\u7684\u8bfb\u6027\u80fd\u74f6\u9888\u7684\u3002"),Object(c.b)("h3",{id:"82512-\u6ce8\u610f\u4e8b\u9879"},"8.25.1.2 \u6ce8\u610f\u4e8b\u9879"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u8981\u8fdb\u884c\u533a\u5206\uff0c\u54ea\u4e9b\u662f\u8bfb\u8fde\u63a5\u6c60\uff0c\u54ea\u4e2a\u662f\u5199\u8fde\u63a5\u6c60\uff0c\u7814\u53d1\u7684\u96be\u5ea6\u4f1a\u589e\u52a0\uff1b"),Object(c.b)("li",{parentName:"ul"},"\u4e3a\u4e86\u4fdd\u8bc1\u9ad8\u53ef\u7528\uff0c\u8bfb\u8fde\u63a5\u6c60\u8981\u80fd\u591f\u5b9e\u73b0\u6545\u969c\u81ea\u52a8\u8f6c\u79fb\uff1b"),Object(c.b)("li",{parentName:"ul"},"\u4e3b\u4ece\u7684\u4e00\u81f4\u6027\u95ee\u9898\u9700\u8981\u8003\u8651\u3002")),Object(c.b)("h2",{id:"8252-\u5982\u4f55\u5b9e\u73b0"},"8.25.2 \u5982\u4f55\u5b9e\u73b0"),Object(c.b)("p",null,Object(c.b)("inlineCode",{parentName:"p"},"Fur")," \u5728\u6570\u636e\u5e93\u6a21\u5757\u8bbe\u8ba1\u4e4b\u521d\uff0c\u5c31\u8003\u8651\u4e86\u8bfb\u5199\u5206\u79bb\u8fd9\u79cd\u60c5\u51b5\uff0c\u6240\u4ee5\u4ece\u5e95\u5c42\u5c31\u652f\u6301\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u53ca\u8bfb\u5199\u64cd\u4f5c\u65b9\u6cd5\u7ea6\u675f\u3002"),Object(c.b)("h2",{id:"8253-\u4e3b\u4ece\u590d\u5236"},"8.25.3 \u4e3b\u4ece\u590d\u5236"),Object(c.b)("h3",{id:"82531-sqlserver-\u914d\u7f6e"},"8.25.3.1 ",Object(c.b)("inlineCode",{parentName:"h3"},"SqlServer")," \u914d\u7f6e"))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/blog/index.html b/handbook/build/blog/index.html index 29548f854df..3f4f47de1f0 100644 --- a/handbook/build/blog/index.html +++ b/handbook/build/blog/index.html @@ -6,7 +6,7 @@ Blog | Fur - + @@ -25,7 +25,7 @@

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/handbook/build/blog/tags/fur/index.html b/handbook/build/blog/tags/fur/index.html index eb882e655c6..5c6d8653458 100644 --- a/handbook/build/blog/tags/fur/index.html +++ b/handbook/build/blog/tags/fur/index.html @@ -6,7 +6,7 @@ Posts tagged "fur" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with "fur"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/handbook/build/blog/tags/furos/index.html b/handbook/build/blog/tags/furos/index.html index c0b2ec20b69..db5062fc71e 100644 --- a/handbook/build/blog/tags/furos/index.html +++ b/handbook/build/blog/tags/furos/index.html @@ -6,7 +6,7 @@ Posts tagged "furos" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with "furos"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/handbook/build/blog/tags/index.html b/handbook/build/blog/tags/index.html index bec0bdb0d22..166d2125584 100644 --- a/handbook/build/blog/tags/index.html +++ b/handbook/build/blog/tags/index.html @@ -6,7 +6,7 @@ Tags | Fur - + @@ -23,7 +23,7 @@ - + diff --git a/handbook/build/blog/tags/net-5/index.html b/handbook/build/blog/tags/net-5/index.html index 54caeed384d..a605702c96d 100644 --- a/handbook/build/blog/tags/net-5/index.html +++ b/handbook/build/blog/tags/net-5/index.html @@ -6,7 +6,7 @@ Posts tagged ".net5" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with ".net5"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/handbook/build/blog/tags/net/index.html b/handbook/build/blog/tags/net/index.html index fa53565efd0..388a2a837f8 100644 --- a/handbook/build/blog/tags/net/index.html +++ b/handbook/build/blog/tags/net/index.html @@ -6,7 +6,7 @@ Posts tagged ".net" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with ".net"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/handbook/build/blog/tags/netcore/index.html b/handbook/build/blog/tags/netcore/index.html index 1af94273728..28c8e47ec77 100644 --- a/handbook/build/blog/tags/netcore/index.html +++ b/handbook/build/blog/tags/netcore/index.html @@ -6,7 +6,7 @@ Posts tagged ".netcore" | Fur - + @@ -25,7 +25,7 @@

1 post tagged with ".netcore"

View All Tags

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

- + diff --git a/handbook/build/blog/welcome/index.html b/handbook/build/blog/welcome/index.html index 734dc106085..779a23147f6 100644 --- a/handbook/build/blog/welcome/index.html +++ b/handbook/build/blog/welcome/index.html @@ -6,7 +6,7 @@ Fur 介绍 | Fur - + @@ -18,13 +18,13 @@ - +
-

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

+

Fur 介绍

dotnet中国

dotnet中国

为中国 .NET 开发者提供优质的资讯和技术分享。

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

- + @@ -36,6 +36,6 @@ - + \ No newline at end of file diff --git a/handbook/build/docs/aop/index.html b/handbook/build/docs/aop/index.html index 79131c5c284..5ef11745efc 100644 --- a/handbook/build/docs/aop/index.html +++ b/handbook/build/docs/aop/index.html @@ -6,7 +6,7 @@ 19. 拦截切面 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/auth-control/index.html b/handbook/build/docs/auth-control/index.html index d5c5291c822..3515fe8c7ed 100644 --- a/handbook/build/docs/auth-control/index.html +++ b/handbook/build/docs/auth-control/index.html @@ -6,7 +6,7 @@ 13. 安全鉴权 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/author/index.html b/handbook/build/docs/author/index.html index fab19501739..000995a1735 100644 --- a/handbook/build/docs/author/index.html +++ b/handbook/build/docs/author/index.html @@ -6,7 +6,7 @@ 1.3 关于作者 | Fur - + @@ -26,7 +26,7 @@

1.3 关于作者

互联网账号

  • 百小僧
  • Monk/MonkSoul

技术能力

自 2008 年 接触 IT 这个行业也有十余年了,在 后端(.NET/.NET Core/Java/PHP)、移动端(Xamarin/小程序/Java/Objective-C)、桌面端(WinForm/WPF/Electron)、前端(React/Vue/Angular/Node)等主流领域略知一二。

同时在技术培训领域也多有涉足。

职业情况

目前经营一家自己创办的软件科技公司,主要销售自主研发的 ERP 产品。

吃不起饭的时候也会接外包项目。

兴趣爱好

是个吃货,喜欢看抖音,看动漫,看美剧,看博客园、看开源中国。

对新技术颇感兴趣,喜欢开源事业,喜欢分享技术。

个人主页

https://gitee.com/monksoul

https://github.com/monksoul

- + diff --git a/handbook/build/docs/cache/index.html b/handbook/build/docs/cache/index.html index 4a9dc9bdee1..8066b8a673a 100644 --- a/handbook/build/docs/cache/index.html +++ b/handbook/build/docs/cache/index.html @@ -6,7 +6,7 @@ 12. 分布式缓存 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/configuration/index.html b/handbook/build/docs/configuration/index.html index cf2608262c5..2338468f163 100644 --- a/handbook/build/docs/configuration/index.html +++ b/handbook/build/docs/configuration/index.html @@ -6,7 +6,7 @@ 3.1 配置 | Fur - + @@ -29,7 +29,7 @@
namespace Fur.Web.Entry
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
// 启动自动扫描配置文件并注入,无需手动添加配置
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, nameof(Fur))
.UseStartup<Startup>();
});
}
}

读取 emailsetting.json 配置

读取自定义配置文件和读取 appsettings.json 一致,系统会自动从多个配置文件中读取输入,如:

var smtpServer = App.Configuration["outlook:smtp:server"]; // => smtp.office365.com

3.1.5 不同环境读取

在实际应用开发中,我们可能会根据不同的环境加载不同的配置文件,如 数据库连接字符串

这时我们只需要遵循特定命名规范 {name}.{Environment}.json 即可。如:

  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json
  • emailsetting.Development.json
  • emailsetting.Staging.json
  • emailsetting.Production.json

这时,ASP.NET Core 会在应用启动时自动加载不同环境的配置文件。

3.1.6 配置更改通知(热更新

.NET Core 应用程序中,配置支持更改通知,也就是热更新操作。一旦监听到 appsetting.json 或自定义配置文件发生变动,就会触发 OnChange 方法。代码如下:

var appInfoConfiguration = App.Configuration["AppInfo"];
ChangeToken.OnChange(() => appInfoConfiguration.GetReloadToken(), () =>
{
var name = appInfoConfiguration["Name"]; // 实时的最新值
var version = appInfoConfiguration["Version"]; // 实时的最新值
});

3.1.7 配置的优缺点

优点

  • 能够在系统运行时快速读取
  • 无需额外配置

缺点

  • 存在重复读取
  • 通过硬编码字符串读取,容易出错
  • 不能设置默认值
  • 不能在运行环境中动态配置
  • 不能验证配置有效性
  • 不支持更改通知

3.1.8 配置使用场景

如果只需要一次性读取配置信息,则使用配置,否则应该使用 《3.2 选项》代替。

3.1.9 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 配置 知识可查阅 ASP.NET Core - 配置 章节。

- + diff --git a/handbook/build/docs/contribute/index.html b/handbook/build/docs/contribute/index.html index a8459bb2c51..037a048685d 100644 --- a/handbook/build/docs/contribute/index.html +++ b/handbook/build/docs/contribute/index.html @@ -6,7 +6,7 @@ 26. 贡献指南 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/cors/index.html b/handbook/build/docs/cors/index.html index c67d47eb570..42a5407af3f 100644 --- a/handbook/build/docs/cors/index.html +++ b/handbook/build/docs/cors/index.html @@ -6,7 +6,7 @@ 14. CORS 跨域 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/data-validation/index.html b/handbook/build/docs/data-validation/index.html index 9104262db22..57470136666 100644 --- a/handbook/build/docs/data-validation/index.html +++ b/handbook/build/docs/data-validation/index.html @@ -6,7 +6,7 @@ 7. 数据校验 | Fur - + @@ -78,7 +78,7 @@
namespace Fur.Application
{
public class FurAppService : IDynamicApiController
{
[TypeFilter(typeof(DataValidationFilter))]
public TestDto Post(TestDto testDto)
{
return testDto;
}
}
}

7.9.4 [ApiController] 控制器范围验证

[ApiController]Mvc 提供的控制器范围(含所有动作方法)的验证。

using Microsoft.AspNetCore.Mvc;
namespace Fur.Web.Entry.Controllers
{
[ApiController]
public class MvcController : Controller
{
public IActionResult Index()
{
return View();
}
}
}

7.10 MiniProfiler 查看

如下图所示:

7.10 多语言支持

文档整理中...

7.11 验证模型提供器

文档整理中...

7.12 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-Interceptor/index.html b/handbook/build/docs/dbcontext-Interceptor/index.html index 42107513fbd..7d1ef1367a3 100644 --- a/handbook/build/docs/dbcontext-Interceptor/index.html +++ b/handbook/build/docs/dbcontext-Interceptor/index.html @@ -6,7 +6,7 @@ 8.23 数据库操作拦截器 | Fur - + @@ -59,7 +59,7 @@
// 提交数据库失败
public override void SaveChangesFailed(DbContextErrorEventData eventData)
{
base.SaveChangesFailed(eventData);
}
// 提交数据库失败(异步)
public override Task SaveChangesFailedAsync(DbContextErrorEventData eventData, CancellationToken cancellationToken = default)
{
return base.SaveChangesFailedAsync(eventData, cancellationToken);
}
}
}

8.23.3 注册自定义过滤器

定义好过滤器之后,我们需要在数据库上下文中注册:

services.AddSqlitePool<FurDbContext>(interceptors: new IInterceptor[] {
new SqlConnectionProfilerInterceptor(),
new DbContextSaveChangesInterceptor(),
new SqlCommandProfilerInterceptor()
});

8.23.4 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-add-or-update/index.html b/handbook/build/docs/dbcontext-add-or-update/index.html index feebb796e32..9cfc481037b 100644 --- a/handbook/build/docs/dbcontext-add-or-update/index.html +++ b/handbook/build/docs/dbcontext-add-or-update/index.html @@ -6,7 +6,7 @@ 8.7 新增或更新操作 | Fur - + @@ -104,7 +104,7 @@
// 示例七
await user.InsertOrUpdateExcludeNowAsync(new[] { u=>u.Name, u=>u.Age});
// 示例八
await user.InsertOrUpdateExcludeNowAsync(new[] {"Age", "Name"});

8.5.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-add/index.html b/handbook/build/docs/dbcontext-add/index.html index 94a41fc0f28..5591e2001ee 100644 --- a/handbook/build/docs/dbcontext-add/index.html +++ b/handbook/build/docs/dbcontext-add/index.html @@ -6,7 +6,7 @@ 8.5 新增操作 | Fur - + @@ -55,7 +55,7 @@
// 示例二
await repository.InsertNowAsync(new List<User> { user, user2 });
// 示例三
await repository.InsertNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

8.5.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-audit/index.html b/handbook/build/docs/dbcontext-audit/index.html index e0ea134071c..2648423cadc 100644 --- a/handbook/build/docs/dbcontext-audit/index.html +++ b/handbook/build/docs/dbcontext-audit/index.html @@ -6,7 +6,7 @@ 8.21 审计日志 | Fur - + @@ -39,7 +39,7 @@
object oldValue = null;
// 如果是新增数据,则 databaseValues 为空,所以需要判断一下
if (databaseValues != null)
{
oldValue = databaseValues[propName];
}
// 插入审计日志表
dbContext.Audits.Add(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
NewValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString(); // 操作方式:新增、更新、删除
});
}
}
}
}
}
小知识

如果对性能有所要求,那么建议审计日志通过 日志组件 写入数据库,如,通过 Nlog、Log4Net 这些等:

// 插入审计日志表
dbContext.Audits.Add(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
newValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString(); // 操作方式:新增、更新、删除
});

替换为:

logger.Information(JsonConvert.SerializeObject(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
newValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString(); // 操作方式:新增、更新、删除
}));

通过上面的例子,我们就可以对数据库所有的新增、更新、删除进行监控了。

8.21.4 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-batch/index.html b/handbook/build/docs/dbcontext-batch/index.html index e3a0f340134..8632780ca4f 100644 --- a/handbook/build/docs/dbcontext-batch/index.html +++ b/handbook/build/docs/dbcontext-batch/index.html @@ -6,7 +6,7 @@ 8.9 批量操作 | Fur - + @@ -34,7 +34,7 @@
// 根据条件批量更新
repository.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 });
repository.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });
await repository.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });
// 批量更新指定列
var updateColumns = new List<string> { nameof(Item.Quantity) };
var q = repository.Where(a => a.ItemId <= 500);
int affected = q.BatchUpdate(new Item { Description = "Updated" }, updateColumns);

8.9.3 批量操作性能

Operations\Rows100,000 EF100,000 EFBulk1,000,000 EFBulk
Insert38.98 s2.10 s17.99 s
Update109.25 s3.96 s31.45 s
Delete7.26 s2.04 s12.18 s
---------------------------------------------------------------
Together70.70 s5.88 s56.84 s

8.9.4 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 EFCore.BulkExtensions 知识可查阅 EFCore.BulkExtensions 开源仓库

- + diff --git a/handbook/build/docs/dbcontext-code-first/index.html b/handbook/build/docs/dbcontext-code-first/index.html index e9770aed188..93dcf6acbe8 100644 --- a/handbook/build/docs/dbcontext-code-first/index.html +++ b/handbook/build/docs/dbcontext-code-first/index.html @@ -6,7 +6,7 @@ 8.19 模型生成数据库 | Fur - + @@ -30,7 +30,7 @@
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 住址
/// </summary>
public string Address { get; set; }
}
}
实体约定

所有数据库实体必须直接或间接继承 IEntity 接口。

8.19.2.2 打开 程序包管理控制台

8.19.2.3 切换默认项目

程序包管理控制台 默认项目设置为 Fur.Database.Migrations

8.19.2.4 创建模型版本

Add-Migration v1.0.0
特别说明

v1.0.0 是此处数据库更改的版本号,可以写任何字符串,但推荐写版本号,每次 +1

最终命令如下:

PM> Add-Migration v1.0.0
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Model.Validation[10400]
Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 5.0.0-rc.1.20451.13 initialized 'FurDbContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Fur.Database.Migrations
To undo this action, use Remove-Migration.
PM>

生成成功后,Fur.Database.Migrations 项目下会新增 Migrations 文件夹(如果没有),同时本次的架构生成文件,如:

8.19.2.5 更新到数据库

Update-Database

执行该命令后,数据库就会自动根据模型生成对于的表。

小知识

如果 Update-Database 后面带字符串参数,则会自动还原数据库到指定版本,如:

Update-Database v0.0.3

将数据库还原到 v0.0.3 版本

8.19.3 更新模型

如果模型改变了,重复上面操作即可,如:

Add-Migration v1.0.1
Update-Database

8.19.4 导出 Sql

有些时候,我们没有直接更新数据库的权限,或者怕出问题,我们都会先生成 Sql 看看,这时候只需要通过 Script-Migration 导出即可,如:

Script-Migration

8.19.5 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 正向工厂 知识可查阅 EF Core - 管理数据库架构 章节。

- + diff --git a/handbook/build/docs/dbcontext-db-first/index.html b/handbook/build/docs/dbcontext-db-first/index.html index 09af84d6261..b31967eda12 100644 --- a/handbook/build/docs/dbcontext-db-first/index.html +++ b/handbook/build/docs/dbcontext-db-first/index.html @@ -6,7 +6,7 @@ 8.18 数据库生成模型 | Fur - + @@ -56,7 +56,7 @@
}
}
Fur Tools v1.0.0 全部实体生成成功!
PM>

8.13.4 命令参数配置

Fur Tools Cli 支持多个参数配置,使用方法只需要在命令后面添加即可,如:

&"../tools/cli.ps1" -Context 数据库上下文名 -ConnectionName 连接字符串Key

支持参数如下:

  • -Tables:配置要生成的数据库表,数组类型,如果为空,则生成数据库所有表和视图。如:-Tables Person,PersonDetails
  • -Context:配置数据库上下文,默认 FurDbContext,如果有多个数据库上下文,则此参数必须配置
  • -ConnectionName:配置数据库连接字符串,对于 appsetting.json 中的 Key
  • -OutputDir:生成实体代码输出目录,默认为:./Fur.Core/Entities/
  • -DbProvider:数据库提供器,默认是 Microsoft.EntityFrameworkCore.SqlServer,其他数据库请指定对应程序集
    • SqlServerMicrosoft.EntityFrameworkCore.SqlServer
    • SqliteMicrosoft.EntityFrameworkCore.Sqlite
    • CosmosMicrosoft.EntityFrameworkCore.Cosmos
    • InMemoryMicrosoft.EntityFrameworkCore.InMemory
    • MySqlPomelo.EntityFrameworkCore.MySql
    • PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL
    • OracleCitms.EntityFrameworkCore.Oracle
  • -EntryProject:Web 启用项目层名,默认 Fur.Web.Entry
  • -CoreProject:实体项目层名,默认 Fur.Core
  • -DbContextLocators:多数据库上下文定位器,默认 DbContextLocator,支持多个,如:DbContextLocator,MySqlDbContextLocator
  • -Product:解决方案默认前缀,如 Fur

8.13.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-delete/index.html b/handbook/build/docs/dbcontext-delete/index.html index a29c56d8614..d4caaa7591c 100644 --- a/handbook/build/docs/dbcontext-delete/index.html +++ b/handbook/build/docs/dbcontext-delete/index.html @@ -6,7 +6,7 @@ 8.8 删除操作 | Fur - + @@ -71,7 +71,7 @@
// 示例五
await entity.FakeDeleteAsync();
// 示例六
await repository.UpdateIncludeAsync(user, u => u.IsDeleted);

8.8.9 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-filter/index.html b/handbook/build/docs/dbcontext-filter/index.html index b44252f9140..29e10c53c19 100644 --- a/handbook/build/docs/dbcontext-filter/index.html +++ b/handbook/build/docs/dbcontext-filter/index.html @@ -6,7 +6,7 @@ 8.22 实体/全局查询筛选器 | Fur - + @@ -38,7 +38,7 @@
// 创建表达式元素
var parameter = Expression.Parameter(metadata.ClrType, "u");
var properyName = Expression.Constant(nameof(Entity.IsDeleted));
var propertyValue = Expression.Constant(false);
// 构建表达式 u => EF.Property<bool>(u, "IsDeleted") == false
var expressionBody = Expression.Equal(Expression.Call(typeof(EF), nameof(EF.Property), new[] { typeof(bool) }, parameter, properyName), propertyValue);
var expression = Expression.Lambda(expressionBody, parameter);
return expression;
}
}
}
小建议

如果对动态构建 LambdaExpression 不熟悉的朋友,可以使用 System.Linq.Dynamic.Corehttps://github.com/zzzprojects/System.Linq.Dynamic.Core

8.22.3 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-function/index.html b/handbook/build/docs/dbcontext-function/index.html index 829a627217a..b97baaf8fb2 100644 --- a/handbook/build/docs/dbcontext-function/index.html +++ b/handbook/build/docs/dbcontext-function/index.html @@ -6,7 +6,7 @@ 8.14 函数操作 | Fur - + @@ -50,7 +50,7 @@
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity(typeof(F_Person)).HasNoKey();
modelBuilder.HasDbFunction(() => GetPersons(default));
}
}
}

8.14.5.4 在 Linq 中使用

IQueryable<F_Person> query = _repository.DynamicDbContext.GetPersons(1);
var result = query.Where(u => u.Name.Equals("Fur")).ToList();

最终生成 Sql

SELECT [g].Id, [g].Name, [g].Age, [g].Address
FROM dbo.GetPersons(1) AS [g]
WHERE [g].Name == N'Fur';

8.14.6 在 EF Core 内置函数

EF Core 为我们提供了很多常用的内置函数,可以在 Lambda 条件中使用,主要是通过 EF.Functions 调用,如:

_repository.Where(u => EF.Functions.DateDiffHour(u.CreatedDt, DateTime.Now) > 8).FirstOrDefault();

这个语句使用了 EF.Functions.DateDiffHour 最终生成的 Sql 如下:

SELECT TOP(1) [a].*
FROM [dbo].[TEST] AS [a]
WHERE DATEDIFF(HOUR, [a].[CREATED_DT], GETDATE()) > 8

EF Core 内置函数就不一一列出了,可以通过 EF.Functions 查看更多,如果不能满足自己的需求,那么可以自定义 Linq 标量函数

8.14.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-hight-query/index.html b/handbook/build/docs/dbcontext-hight-query/index.html index 30926e7904d..50227c26e9f 100644 --- a/handbook/build/docs/dbcontext-hight-query/index.html +++ b/handbook/build/docs/dbcontext-hight-query/index.html @@ -6,7 +6,7 @@ 8.11 高级查询操作 | Fur - + @@ -57,7 +57,7 @@
namespace Fur.Core
{
public class Person : Entity, IEntityTypeBuilder<Person>
{
public string Name { get; set; }
/// <summary>
/// 配置实体关系
/// </summary>
/// <param name="entityBuilder"></param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
public void Configure(EntityTypeBuilder<City> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.ToSqlQuery(
@"select * from dbo.person.2020-09-19
union all
select * from dbo.person.2020-09-20");
}
}
}
var posts = repository.Where(u => u.Id > 10).ToList();

8.11.12 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-locator/index.html b/handbook/build/docs/dbcontext-locator/index.html index d2b8b4cb851..92ce6a4528b 100644 --- a/handbook/build/docs/dbcontext-locator/index.html +++ b/handbook/build/docs/dbcontext-locator/index.html @@ -6,7 +6,7 @@ 8.2 数据库上下文定位器 | Fur - + @@ -28,7 +28,7 @@
namespace Fur.Core
{
public sealed class FurDbContextLocator : IDbContextLocator
{
}
}

8.2.4 默认数据库上下文定位器

Fur 框架中已经提供了 DbContextLocator 默认数据库上下文定位器,所以默认数据库上下文只需继承 AppDbContext<TDbContext> 即可。

AppDbContext<TDbContext> 定义代码如下:

using Fur.DependencyInjection;
using Microsoft.EntityFrameworkCore;
namespace Fur.DatabaseAccessor
{
/// <summary>
/// 默认应用数据库上下文
/// </summary>
/// <typeparam name="TDbContext">数据库上下文</typeparam>
[NonBeScan]
public abstract class AppDbContext<TDbContext> : AppDbContext<TDbContext, DbContextLocator>
where TDbContext : DbContext
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="options"></param>
public AppDbContext(DbContextOptions<TDbContext> options) : base(options)
{
}
}
}

8.2.5 数据库上下文定位器支持对象

目前数据库上下文支持以下多个对象:

  • AppDbContext<TEntity, TDbContextLocator>:数据上下文
  • IRepository<TEntity, TDbContextLocator:实体仓储
  • ISqlRepository<TDbContextLocator>: Sql 操作仓储
  • Func<Type, DbContext>:依赖注入获取数据库上下文
  • Entity<Tkey, TDbContextLocator> :实体配置
  • EntityBase<Tkey, TDbContextLocator1, ... TDbContextLocator8>:实体配置
  • EntityNotKey<TDbContextLocator1, ... TDbContextLocator8>:无键实体配置
  • IEntitySeedData<TEntity, TDbContextLocator1, ... TDbContextLocator8>:种子数据配置
  • IEntityTypeBuilder<TEntity, TDbContextLocator1, ... TDbContextLocator8>:实体类型构建器
  • IModelBuilderFilter<TDbContextLocator1, ... TDbContextLocator8>:模型构建筛选器
  • [QueryableFunction(DbContextLocators=Type[])]:查询函数

8.2.6 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-multi-database/index.html b/handbook/build/docs/dbcontext-multi-database/index.html index d4e30f4406d..37badafd178 100644 --- a/handbook/build/docs/dbcontext-multi-database/index.html +++ b/handbook/build/docs/dbcontext-multi-database/index.html @@ -6,7 +6,7 @@ 8.17 多数据库操作 | Fur - + @@ -47,7 +47,7 @@
/// <summary>
/// 数据库 SqlServer
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="options">数据库上下文选项构建器</param>
private static void ConfigureSqlServer(string connectionString, DbContextOptionsBuilder options)
{
options.UseSqlServer(connectionString, options =>
{
// 配置全局切割 Sql,而不是生成单个复杂 sql
//options.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
// 配置 code first 程序集
options.MigrationsAssembly("Fur.Database.Migrations");
//options.EnableRetryOnFailure();
//options.MigrationsHistoryTable("__EFMigrationsHistory", "fur");
});
}
}
}

8.17.4 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-proc/index.html b/handbook/build/docs/dbcontext-proc/index.html index e0dc2172865..db7db78dc5a 100644 --- a/handbook/build/docs/dbcontext-proc/index.html +++ b/handbook/build/docs/dbcontext-proc/index.html @@ -6,7 +6,7 @@ 8.13 存储过程操作 | Fur - + @@ -119,7 +119,7 @@
// 获取 RETURN 返回值
var reval = result.ReturnValue;
// 获取返回结果集
var (list1,list2) = result.Result;
关于异步

Fur 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

8.13.3 关于 [DbParameter]

[DbParameter] 特性是用来标注 Sql函数存储过程 参数的,可配置属性:

  • Direction:设置参数方向,ParameterDirection 枚举类型,默认 ParameterDirection.Input
  • DbType:设置参数类型,DbType 枚举类型,无默认
  • Size:设置参数长度的,int 类型

其中 Direction 属性是默认构造函数参数。

8.13.4 关于 ProcedureOutputResult

ProcedureOutputResultProcedureOutputResult<TResult> 是复杂存储过程执行返回模型类,有以下属性:

  • OutputValues:多个输出值,ProcedureOutputValue 类型
  • ReturnValue:返回值,object 类型
  • Result:结果集,非泛型版本是 DataSet类型,否则是 泛型类型

8.13.5 存储过程参数

所有 sql 参数都支持四种方式:

  • DbParameter[]:数组类型
  • new {}:匿名类型
  • new Class{}:强类型类型(支持复杂存储过程参数)
  • Dictionary<string,object> 类型

8.13.6 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-query/index.html b/handbook/build/docs/dbcontext-query/index.html index 267aa327564..bd0b0718bf5 100644 --- a/handbook/build/docs/dbcontext-query/index.html +++ b/handbook/build/docs/dbcontext-query/index.html @@ -6,7 +6,7 @@ 8.10 查询操作 | Fur - + @@ -138,7 +138,7 @@
// 示例二
_testRepository.Where(u => u.Name.EndWith("Fur"));
// 示例三
_testRepository.Where(u => u.Name.Contains("Fur"));

8.10.6.9 Case When

数据库中的 Case When 实际上对应的是我们程序中的 三元表达式 ,也就是使用 三元表达式 即可自动生成 Case When 语句。

8.10.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-read-write/index.html b/handbook/build/docs/dbcontext-read-write/index.html index 5f6102e0c60..5e7d2d38c88 100644 --- a/handbook/build/docs/dbcontext-read-write/index.html +++ b/handbook/build/docs/dbcontext-read-write/index.html @@ -4,9 +4,9 @@ -8.25 读写分离/主从复制 | Fur +8.25 读写分离/主从复制 | Fur - + @@ -20,13 +20,13 @@ - + +

8.25 读写分离/主从复制

8.25.1 读写分离

其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。

8.25.1.1 解决了什么问题

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。

用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。

8.25.1.2 注意事项

  • 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加;
  • 为了保证高可用,读连接池要能够实现故障自动转移;
  • 主从的一致性问题需要考虑。

8.25.2 如何实现

Fur 在数据库模块设计之初,就考虑了读写分离这种情况,所以从底层就支持动态切换数据库上下文及读写操作方法约束。

8.25.3 主从复制

8.25.3.1 SqlServer 配置

- + @@ -40,6 +40,6 @@ - + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-repository/index.html b/handbook/build/docs/dbcontext-repository/index.html index bfde0de99af..a4c24c076cd 100644 --- a/handbook/build/docs/dbcontext-repository/index.html +++ b/handbook/build/docs/dbcontext-repository/index.html @@ -6,7 +6,7 @@ 8.4 关于仓储 | Fur - + @@ -33,7 +33,7 @@
// 其他更多数据库一样的操作

另外任何仓储或实体配置都支持多个数据库同时操作

仓储方式

IRepository<Person, MsSqlDbContextLocator> mssqlRepository
ISqlRepository<MsSqlDbContextLocator> mssqlRepository;

动态 sql 方式

"select * from person".Change<MsSqlDbContextLocator>().SqlQuery();

实体配置方式

public class User:Entity<MsSqlDbContextLocator, MySqlDbContextLocator>
{
}

Sql 代理方式

[SqlFunction("funcName", DbContextLocator = typeof(MySqlDbContextLocator))]
int GetAge(int id);

Linq 中方式

[QueryableFunction("funcName","dbo", DbContextLocator = typeof(MySqlDbContextLocator))]
string GetName()=> throw Oops.Oh("不支持该数据库操作");

8.4.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-seed-data/index.html b/handbook/build/docs/dbcontext-seed-data/index.html index dc94051d1b8..c0d94eff856 100644 --- a/handbook/build/docs/dbcontext-seed-data/index.html +++ b/handbook/build/docs/dbcontext-seed-data/index.html @@ -6,7 +6,7 @@ 8.20 实体种子数据 | Fur - + @@ -32,7 +32,7 @@
namespace Fur.Application
{
public class PersonSeedData : IEntitySeedData<Person>
{
// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}

8.20.3 导航属性

通常我们的实体有 一对多多对多等外键关系,那么我们需要单独为每一个实体添加数据种子,而不是直接写在主表中。

8.20.4 多个数据库种子数据

Fur 提供泛型的方式支持多个数据库种子数据设定,如:

using Fur.DatabaseAccessor;
using System.Collections.Generic;
namespace Fur.Application
{
public class PersonSeedData : IEntitySeedData<Person, MySqlDbContextLocator, SqliteDbContextLocator>
{
// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}

上面的例子表示同时为 MySqlDbContextSqliteDbContext 创建种子数据。

8.20.5 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 数据种子 知识可查阅 EF Core - 数据种子设定 章节。

- + diff --git a/handbook/build/docs/dbcontext-sql-proxy/index.html b/handbook/build/docs/dbcontext-sql-proxy/index.html index 2c6f735359a..449b285e1b0 100644 --- a/handbook/build/docs/dbcontext-sql-proxy/index.html +++ b/handbook/build/docs/dbcontext-sql-proxy/index.html @@ -6,7 +6,7 @@ 8.16 Sql 高级代理 | Fur - + @@ -76,7 +76,7 @@
namespace Fur.Application
{
public class ISql : ISqlDispatchProxy
{
[SqlFunction("FN_Name")] // 标量函数
string GetValue(MyParam dto);
[SqlProcedure("FN_Name")] // 表值函数
List<Person> GetPersons(int id);
}
}
补充说明

Sql 代理会自动判断返回值然后自动执行特定函数类型。

8.16.6 为什么用它?

通过上面的例子大家就可以了解,这种方式操作 sql 非常简单,而且极易维护。大家不用去关系返回值,关心用哪个方法,所有东西会自动给你处理好。

所以,如果需要用 Sql 操作,推荐使用 Sql 高级代理。

8.16.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-sql/index.html b/handbook/build/docs/dbcontext-sql/index.html index 35f371b260e..e148003d0eb 100644 --- a/handbook/build/docs/dbcontext-sql/index.html +++ b/handbook/build/docs/dbcontext-sql/index.html @@ -6,7 +6,7 @@ 8.15 Sql 操作 | Fur - + @@ -173,7 +173,7 @@
// 不再举例子。。。。。。
补充说明

不管是那种方式操作 Sql ,方法名参数都是一致的,如:

  • SqlQuery
  • SqlQueryAsync
  • SqlQueries
  • SqlQueriesAsync
  • SqlNonQuery
  • SqlNonQueryAsync
  • SqlScalar
  • SqlScalarAsync
  • SqlProcedureQuery
  • SqlProcedureQueryAsync
  • SqlProcedureQueries
  • SqlProcedureQueriesAsync
  • SqlProcedureScalar
  • SqlProcedureScalarAsync
  • SqlProcedureNonQuery
  • SqlProcedureNonQueryAsync
  • SqlProcedureOutput
  • SqlProcedureOutputAsync
  • SqlFunctionScalar
  • SqlFunctionScalarAsync
  • SqlFunctionQuery
  • SqlFunctionQuery

8.15.6 IRepository 操作

IRepository 也能操作 sql,调用方法也是和上面一致的,如:

var dataTable = repository.Sql().SqlQuery("select * from person");
特别说明

由于篇幅有限,不再列举所有例子。

8.15.7 IRepository<TEntity> 操作

IRepository<TEntity> 也能操作 sql,调用方法也是和上面一致的,如:

var dataTable = personRepository.SqlQuery("select * from person");
特别说明

由于篇幅有限,不再列举所有例子。

8.15.8 关于 Sql 参数

所有 sql存储过程函数 参数都支持四种方式:

  • DbParameter[]:数组类型
  • new {}:匿名类型
  • new Class{}:强类型类型(支持复杂存储过程参数)
  • Dictionary<string,object> 类型
小知识

建议除了复杂的存储过程(带 OUTPUT/RETURN)的以外,所有参数建议使用 new {} 匿名类型,如果需要动态参数,则可以使用 Dictionary<string,object> 类型。

8.15.9 多数据库 Sql 操作 💯 💛

Fur 框架拥有非常灵活的多数据库操作方式,只需通过多数据库上下文定位器即可动态切换数据库。

8.15.9.1 懒人无敌 🐮 方式

var dataTable = "select * from person".Change<MySqlDbContextLocator>().SqlQuery();
var persons = "select * from person whre id > @id".Change<SqliteDbContextLocator>().SqlQuery<Person>();
补充说明

懒人方式 只需要通过 Change<TDbContextLocator> 方式即可动态切换数据库。

8.15.9.2 ISqlRepository 方式

只需要通过 ISqlRepository<TDbContextLocator> 注入或通过 sqlRepository.Change<TDbContextLocator>() 切换。

8.15.9.3 IRepository 方式

只需要通过 repository.Change<TDbContextLocator>() 获取即可。

8.15.9.4 IRepository<TEntity> 方式

只需要通过 IRepository<TEntity, TDbContextLocator> 注入或通过 personRepository.Change<TEntity, TDbContextLocator>() 切换。

8.15.10 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-update/index.html b/handbook/build/docs/dbcontext-update/index.html index 075b46edc59..78cee3b6bc1 100644 --- a/handbook/build/docs/dbcontext-update/index.html +++ b/handbook/build/docs/dbcontext-update/index.html @@ -6,7 +6,7 @@ 8.6 更新操作 | Fur - + @@ -198,7 +198,7 @@
// 示例二
await repository.UpdateNowAsync(new List<User> { user, user2 });
// 示例三
await repository.UpdateNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

8.6.15 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext-view/index.html b/handbook/build/docs/dbcontext-view/index.html index d455cd193ea..8180dd8e15b 100644 --- a/handbook/build/docs/dbcontext-view/index.html +++ b/handbook/build/docs/dbcontext-view/index.html @@ -6,7 +6,7 @@ 8.12 视图操作 | Fur - + @@ -34,7 +34,7 @@
public FurService(IRepository<V_Person> repository)
{
// 初始化只读仓储
_readableRepository = repository.Constraint<IReadableRepository<V_Person>>();
}
/// <summary>
/// 读取视图
/// </summary>
/// <returns></returns>
public async Task<List<V_Person>> GetVPerson()
{
var list = await _readableRepository.AsAsyncEnumerable();
return list;
}
}
}
小知识

通过 .Constraint<TEntity,TDbContextLocator> 方法可以将仓储约束为特定仓储,如只读仓储,可读可写仓储,只新增仓储等。

8.12.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/dbcontext/index.html b/handbook/build/docs/dbcontext/index.html index 8fd9b0fc7a6..6a121c1b294 100644 --- a/handbook/build/docs/dbcontext/index.html +++ b/handbook/build/docs/dbcontext/index.html @@ -6,7 +6,7 @@ 8.1 数据库上下文 | Fur - + @@ -34,7 +34,7 @@
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("数据库连接字符串");
}
}
}

8.1.6 数据库上下文定义位置

特别注意

Fur 框架中,数据库上下文需定义在 Fur.EntityFramework.Core 中,且每一个数据库上下文都必须拥有唯一的 DbContextLocator 定位器

8.1.7 动态数据库上下文对象

Fur 框架中,数据库上下文是定义在 Fur.EntityFramework.Core 项目层,并且该层不被 Fur.ApplicationFur.Core 等层引用。

所以就不能直接在 Fur.Application 项目层直接使用 Fur.EntityFramework.Core 定义的数据库上下文。

Fur 为了解决这个问题,提供了两种方式处理:

  • respository.DbContext :当前数据库上下文对象,返回是 DbContext 抽象类型
  • respository.DynamicDbContext:当前数据库上下文对象,返回的是 dynamic 类型

如果你只是想使用 DbContext 的功能,直接使用 respository.DbContext 即可,如:

respository.DbContext.SaveChanges();

如果你想能够获取具体的数据库上下文类型,如 MyDbContext,那么使用 respository.DynamicDbContext 就可以获取到具体的 MyDbContext 类型。如:

var persons = respository.DynamicDbContext.Persons.Find(1);
var users = respository.DynamicDbContext.Users;

这样就可以直接操作 MyDbContext 定义的属性和方法了。

8.1.8 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 数据库上下文 知识可查阅 EF Core - 配置 DbContext 章节。

- + diff --git a/handbook/build/docs/dependency-injection/index.html b/handbook/build/docs/dependency-injection/index.html index 8331cac7f8e..9491c64f304 100644 --- a/handbook/build/docs/dependency-injection/index.html +++ b/handbook/build/docs/dependency-injection/index.html @@ -6,7 +6,7 @@ 10. 依赖注入/控制反转 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/deploy/index.html b/handbook/build/docs/deploy/index.html index 968b5b082c5..d840c8cc266 100644 --- a/handbook/build/docs/deploy/index.html +++ b/handbook/build/docs/deploy/index.html @@ -6,7 +6,7 @@ 23. 托管部署 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/devops/index.html b/handbook/build/docs/devops/index.html index 16f06c5a879..b5fe645b7f6 100644 --- a/handbook/build/docs/devops/index.html +++ b/handbook/build/docs/devops/index.html @@ -6,7 +6,7 @@ 24. 持续部署集成 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/dynamic-api-controller/index.html b/handbook/build/docs/dynamic-api-controller/index.html index 1d963a4f752..0070fdaf78d 100644 --- a/handbook/build/docs/dynamic-api-controller/index.html +++ b/handbook/build/docs/dynamic-api-controller/index.html @@ -6,7 +6,7 @@ 4. 动态 WebAPI | Fur - + @@ -75,7 +75,7 @@
namespace Fur.Web.Entry.Controllers
{
public class MvcController : ControllerBase
{
public string Get()
{
return nameof(Fur);
}
}
}
注意事项

启用该配置后,如果 Mvc 控制器 没有任何 [Route] 特性,但是贴了 [ApiController] 特性将会报错。原因是 [ApiController] 特性内部做了路由特性检测。所以建议使用 [ApiDataValidation] 代替。

查看 ASP.NET Core - ApiBehaviorApplicationModelProvider 源码

4.11 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/entity/index.html b/handbook/build/docs/entity/index.html index af7ccb434c9..ea98330a6df 100644 --- a/handbook/build/docs/entity/index.html +++ b/handbook/build/docs/entity/index.html @@ -6,7 +6,7 @@ 8.3 数据库实体 | Fur - + @@ -39,7 +39,7 @@
// 配置数据库实体
public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasKey(u => u.Id);
entityBuilder.HasIndex(u => u.Name);
}
}
}

8.3.3.2 在任何实例类中配置

using Fur.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
namespace Fur.Core
{
public class SomeClass : IEntityTypeBuilder<User>
{
public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasKey(u => u.Id);
entityBuilder.HasIndex(u => u.Name);
}
}
}

如,上面例子,通过 SomeClass 配置 User 数据库实体。

8.3.4 数据库实体配置说明

Fur 框架会自动扫描所有继承 IEntity 接口的类进行 DbSet<TEntity> 注册,也就是实现自动配置 DbContextOnModelCreating

如果需要跳过自动注册,只需要贴 [NonAutomatic][NonBeScan] 特性即可。一旦贴了次特性,那么就需要手动配置 DbContextOnModelCreating

8.3.5 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/event-bus/index.html b/handbook/build/docs/event-bus/index.html index ea6ee6df9a6..8b19c233207 100644 --- a/handbook/build/docs/event-bus/index.html +++ b/handbook/build/docs/event-bus/index.html @@ -6,7 +6,7 @@ 17. 事件总线 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/friendly-exception/index.html b/handbook/build/docs/friendly-exception/index.html index 3a2e066a660..c9238b70e27 100644 --- a/handbook/build/docs/friendly-exception/index.html +++ b/handbook/build/docs/friendly-exception/index.html @@ -6,7 +6,7 @@ 6. 友好异常处理 | Fur - + @@ -59,7 +59,7 @@
namespace Fur.Application
{
public class FurAppService : IDynamicApiController
{
[IfException(ErrorCodes.z1000, ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
[IfException(ErrorCodes.x1001, "格式化参数1", "格式化参数2", ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
[IfException(ErrorCodes.x1000, "格式化参数1", "格式化参数2")]
[IfException(ErrorCodes.SERVER_ERROR, "格式化参数1", "格式化参数2")]
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh(ErrorCodes.z1000, id, 3);
}
return id;
}
}
}
格式化流程

如果消息内容中包含格式化占位符但未指定格式化参数,那么会查找异常所在方法是否贴有 [IfException] 特性且含有格式化参数,接着就会查找 Oops.Oh 中指定的 格式化参数

6.11 异常消息优先级

[ErrorCodeItemMetadata] -> appsettings.json -> [IfException](低 -> 高)

  • [IfException] 会覆盖 appsettings.json 定义的状态码消息。
  • appsettings.json 会覆盖 [ErrorCodeItemMetadata] 定义的消息。

6.12 多语言支持

文档整理中...

6.13 异常模型提供器

文档整理中...

6.14 Fur 内置异常

  • EFCoreErrorCodesEF Core 操作异常
    • DataNotFound:未找到数据
    • KeyNotSet:没有设置主键

6.15 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/get-start/index.html b/handbook/build/docs/get-start/index.html index 955583b41d3..ce0455b19fb 100644 --- a/handbook/build/docs/get-start/index.html +++ b/handbook/build/docs/get-start/index.html @@ -6,7 +6,7 @@ 2. 一分钟入门 | Fur - + @@ -45,7 +45,7 @@
/// <summary>
/// 姓名
/// </summary>
[StringLength(32, MinimumLength = 2)]
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
}
}

说好一分钟入门,你们用了多长时间。😁

- + diff --git a/handbook/build/docs/index.html b/handbook/build/docs/index.html index 750a816fcd1..eb1fa951060 100644 --- a/handbook/build/docs/index.html +++ b/handbook/build/docs/index.html @@ -6,7 +6,7 @@ 1.1 介绍 | Fur - + @@ -20,13 +20,13 @@ - +
-

1.1 介绍

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

+

1.1 介绍

star fork GitHub stars GitHub forks GitHub license QQ群-592844340

Fur.NET 5 平台下极易入门、极速开发的 Web 应用框架。

🍕 名字的由来

故事是这样子的:

起初,想开发一个极易入门、极易维护的框架,开发理念为:一切从简,只为了更懒

所以自然而然想到了:Lazier,也就是 更懒 的意思。但是 更懒更烂 读音相近且中文名没有特色,对此换名问题我苦恼了好几天。

刚好有一次我在博客园中帮一个博友解答问题,解决后博友赞扬我对 .NET Core 颇有了解,我就顺嘴回答了一句:“略懂皮毛”

就这时,脑瓜子灵机一动,干脆起名为:“皮毛”?英文单词 Fur [fɜː(r)]”,单词又短而且中文读音既俗气又顺口。😄😎

所以,Fur 就诞生了。

之后就有了 “小僧不才,略懂皮毛(Fur)。” 广告语 和 chinadot.net 域名。

🍔 关于 LOGO

Fur LOGO 设计由 F U R 三个单词组成:

我相信很多人看到 Fur 的 LOGO 时都会问:“为什么选择奶牛?”,因为 那些年吹过的牛逼都实现了 🐮

之所以选择 奶牛 是因为 具有脚踏实地,任劳任怨的做事风格,同时 奶牛 意味着丰富的营养价值,正如 Fur 所能带给你的。

🍟 文档地址

https://chinadot.net

🌭 开源地址

🍿 Docker 镜像

docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03

🥞 架构设计

正在整理中...

🥝 功能模块

🥐 框架依赖

Fur 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Fur 仅集成了以下三个依赖:

麻雀虽小五脏俱全。Fur 即使只集成了这三个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 Preview 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS
    • Docker/K8S/K3S/Rancher
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • PostgreSQL
    • InMemory
    • Oracle

🍖 关于性能

Fur 目前采用 Visual Studio 2019 Preview 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🥟 问答 FAQ

🥇 1. 不是有一个 Abp 框架了吗?

Abp 确实是非常棒的框架,曾经本人也受益于它,Fur 并不是想要替代 Abp,而是想给 .NET 开发者多一个选择。

同时 Fur 框架是本人这 12 年的 .NET 开发经验的浓缩版。

🥈 2. 和 Abp 框架的区别?

FurAbp 有几大区别:

  • Fur 追求的是极少依赖和极速开发,和 Abp 大而包容不同
  • Fur 遵循宽松自由的 Apache-2.0 开源协议,这一点和 Abp 采用商用 LGPL-3.0 协议有着很大差别
  • Fur 符合中国国情开发,深知中国开发者最需要什么,框架内部提供了大量开发者需要的语法糖,而不仅仅是基础操作
  • FurAbp 在实现相同功能上,Fur 做的更加灵活和简单
  • Fur 是基于最新的 .NET 5 开发,抛开历史包袱,乘上 .NET 彻底跨平台的大船
  • Fur 是作为中国开发者推出,仅此而已

🥉 3. 为什么想要开发这样的一个框架?

开发这样的框架目的是为了能够提高自己的开发效率,也是为了验证自己对 .NET 新技术的掌握程度,同时也希望通过开源能够帮到更多的 .NET 开发者,也能从中受益。


🍚 关于作者

一个拥有 12 年开发经验 .NETer。喜欢分享,喜欢新技术,在互联网多个技术领域皆有涉猎。

🍤 项目成员

🎈 欢迎更多的开发者加入 Fur 大家庭。

🍝 谁在使用

  • 百签科技(广东)有限公司
  • 码为科技(广州)有限公司
  • 广州启顺国际货运代理有限公司
  • 森丰供应链服务(广州)有限公司
  • 中山赢友网络科技有限公司
  • 中山模思软件科技有限公司
  • 珠海市恒泰新软件有限责任公司
  • 珠海思诺锐创软件有限公司
  • 深圳市易胜科技有限公司
  • 重庆虫儿飞科技有限公司
  • 重庆林木森科技有限公司

如果您的项目使用到 Fur 开发,可以告诉我们。

🍻 贡献代码

Fur 遵循 Apache-2.0 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看贡献指南。

🍍 捐赠列表

注:排序按捐赠顺序书写

捐赠人昵称捐赠金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...

非常感谢您们的支持,正是因为您们,中国开源才可以越走越远,Fur 越走越远。

🥔 QQ 交流群

🧆 友情链接

👉 Fur 👉 SqlSugar 👉 Layx 👉 t-io

- + @@ -40,6 +40,6 @@ - + \ No newline at end of file diff --git a/handbook/build/docs/job/index.html b/handbook/build/docs/job/index.html index a9b106cadd9..59587908382 100644 --- a/handbook/build/docs/job/index.html +++ b/handbook/build/docs/job/index.html @@ -6,7 +6,7 @@ 21. 任务调度 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/local-language/index.html b/handbook/build/docs/local-language/index.html index 0c9022022c9..6728e7d1e1c 100644 --- a/handbook/build/docs/local-language/index.html +++ b/handbook/build/docs/local-language/index.html @@ -6,7 +6,7 @@ 15. 多语言处理 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/logging/index.html b/handbook/build/docs/logging/index.html index 586a73b170d..fba12eaa1a1 100644 --- a/handbook/build/docs/logging/index.html +++ b/handbook/build/docs/logging/index.html @@ -6,7 +6,7 @@ 18. 日志记录 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/object-mapper/index.html b/handbook/build/docs/object-mapper/index.html index e70354b67e6..830645e1077 100644 --- a/handbook/build/docs/object-mapper/index.html +++ b/handbook/build/docs/object-mapper/index.html @@ -6,7 +6,7 @@ 11. 对象数据映射 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/options/index.html b/handbook/build/docs/options/index.html index 572af3a586e..cfa3fb78bf1 100644 --- a/handbook/build/docs/options/index.html +++ b/handbook/build/docs/options/index.html @@ -6,7 +6,7 @@ 3.2 选项 | Fur - + @@ -41,7 +41,7 @@
public void OnListener(AppInfoOptions options, IConfiguration configuration)
{
var name = options.Name; // 实时的最新值
var version = options.Version; // 实时的最新值
}
public void PostConfigure(AppInfoOptions options, IConfiguration configuration)
{
}
}
特别说明

IConfigurableOptionsListener<TOptions> 继承自 IConfigurableOptions<TOptions>

3.3.9 选项的优缺点

优点

  • 强类型配置
  • 提供多种读取方式
  • 支持热加载
  • 支持设置默认值/后期配置
  • 支持在运行环境中动态配置
  • 支持验证配置有效性
  • 支持更改通知
  • 支持命名选项

缺点

  • 需要定义对应类型
  • 需要在启动时注册

3.3.10 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 选项 知识可查阅 ASP.NET Core - 选项 章节。

- + diff --git a/handbook/build/docs/performance/index.html b/handbook/build/docs/performance/index.html index 2e20162d23b..a91e01e1bbf 100644 --- a/handbook/build/docs/performance/index.html +++ b/handbook/build/docs/performance/index.html @@ -6,7 +6,7 @@ 25.2 性能测试 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/process-service/index.html b/handbook/build/docs/process-service/index.html index bd2402aa961..b8897bfd868 100644 --- a/handbook/build/docs/process-service/index.html +++ b/handbook/build/docs/process-service/index.html @@ -6,7 +6,7 @@ 20. 进程服务 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/saas/index.html b/handbook/build/docs/saas/index.html index e61629d02e7..7b307bcc079 100644 --- a/handbook/build/docs/saas/index.html +++ b/handbook/build/docs/saas/index.html @@ -6,7 +6,7 @@ 9. SaaS 多租户 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/signalr/index.html b/handbook/build/docs/signalr/index.html index 5a1c1fc5119..d6a26e29b3e 100644 --- a/handbook/build/docs/signalr/index.html +++ b/handbook/build/docs/signalr/index.html @@ -6,7 +6,7 @@ 22. 即时通讯 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/source/index.html b/handbook/build/docs/source/index.html index a1468665c57..eaa1e96bed6 100644 --- a/handbook/build/docs/source/index.html +++ b/handbook/build/docs/source/index.html @@ -6,7 +6,7 @@ 1.2 源码结构 | Fur - + @@ -58,7 +58,7 @@
#prefer fields not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_field = false:suggestion
#prefer methods not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_method = false:suggestion
#prefer properties not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_property = false:suggestion
# Add file header
file_header_template = -----------------------------------------------------------------------------\nFur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。\nCopyright © 2020 Fur, Baiqian Co.,Ltd.\n\n框架名称:Fur\n框架作者:百小僧\n框架版本:1.0.0\n源码地址:Gitee:https://gitee.com/monksoul/Fur \n Github:https://github.com/monksoul/Fur \n开源协议:Apache-2.0(http://www.apache.org/licenses/LICENSE-2.0)\n-----------------------------------------------------------------------------

1.2.4 Fur 核心层

Fur 核心层是 Fur 框架的中心,也是 Fur 能够支撑起来的必备层。

源码结构:

Fur
├─Fur.csproj
├─Fur.csproj.user
├─FurStartup.cs
├─ViewEngine
| ├─IViewEngine.cs
| ├─ViewEngine.cs
| ├─Templates
| | ├─IViewEngineCompiledTemplate.cs
| | ├─IViewEngineTemplate.cs
| | ├─ViewEngineCompiledTemplate.cs
| | └ViewEngineTemplate.cs
| ├─Options
| | └ViewEngineCompilationOptions.cs
| ├─Models
| | └AnonymousTypeWrapper.cs
| ├─Exceptions
| | ├─ViewEngineCompilationException.cs
| | └ViewEngineException.cs
| ├─Compilations
| | ├─IViewEngineCompilationOptionsBuilder.cs
| | └ViewEngineCompilationOptionsBuilder.cs
├─UnifyResult
| ├─Providers
| | ├─IUnifyResultProvider.cs
| | └RESTfulResultProvider.cs
| ├─Models
| | └RESTfulResult.cs
| ├─Filters
| | └SuccessUnifyResultFilter.cs
| ├─Extensions
| | └UnifyResultServiceCollectionExtensions.cs
├─SpecificationDocument
| ├─Options
| | └SpecificationDocumentSettingsOptions.cs
| ├─Models
| | ├─GroupOrder.cs
| | ├─SpecificationOpenApiInfo.cs
| | ├─SpecificationOpenApiSecurityRequirementItem.cs
| | └SpecificationOpenApiSecurityScheme.cs
| ├─Extensions
| | ├─SpecificationDocumentApplicationBuilderExtensions.cs
| | └SpecificationDocumentServiceCollectionExtensions.cs
| ├─Builders
| | └SpecificationDocumentBuilder.cs
| ├─Assets
| | └index-mini-profiler.html
├─ObjectMapper
| ├─Extensions
| | └ObjectMapperServiceCollectionExtensions.cs
| ├─Dependencies
| | └IObjectMapper.cs
├─LinqBuilder
| ├─Visitors
| | └ParameterReplaceExpressionVisitor.cs
| ├─Extensions
| | └LinqExtensions.cs
| ├─Builders
| | └LinqExpression.cs
├─FriendlyException
| ├─Oops.cs
| ├─Providers
| | └IErrorCodeTypeProvider.cs
| ├─Options
| | └ErrorCodeMessageSettingsOptions.cs
| ├─Models
| | └MethodIfException.cs
| ├─Filters
| | └FriendlyExceptionFilter.cs
| ├─Extensions
| | └FriendlyExceptionServiceCollectionExtensions.cs
| ├─Attributes
| | ├─ErrorCodeItemMetadataAttribute.cs
| | ├─ErrorCodeTypeAttribute.cs
| | └IfExceptionAttribute.cs
├─DynamicApiController
| ├─Penetrates.cs
| ├─Providers
| | └DynamicApiControllerFeatureProvider.cs
| ├─Options
| | └DynamicApiControllerSettingsOptions.cs
| ├─Models
| | └ParameterRouteTemplate.cs
| ├─Extensions
| | └DynamicApiControllerServiceCollectionExtensions.cs
| ├─Enums
| | └ApiSeats.cs
| ├─Dependencies
| | └IDynamicApiController.cs
| ├─Conventions
| | └DynamicApiControllerApplicationModelConvention.cs
| ├─Attributes
| | ├─ApiDescriptionSettingsAttribute.cs
| | ├─ApiSeatAttribute.cs
| | └DynamicApiControllerAttribute.cs
├─DependencyInjection
| ├─Extensions
| | └DependencyInjectionServiceCollectionExtensions.cs
| ├─Enums
| | ├─InjectionOptions.cs
| | ├─InjectionScopeOptions.cs
| | └RegisterType.cs
| ├─Dependencies
| | ├─IDependencyInjection.cs
| | ├─IScopedInjection.cs
| | ├─ISingletonInjection.cs
| | ├─ITransientInjection.cs
| | ├─Aop
| | | └IDispatchProxy.cs
| ├─Attributes
| | ├─InjectionAttribute.cs
| | └SkipScanAttribute.cs
├─DataValidation
| ├─Validators
| | └DataValidator.cs
| ├─Providers
| | └IValidationMessageTypeProvider.cs
| ├─Options
| | └ValidationTypeMessageSettingsOptions.cs
| ├─Models
| | └DataValidationResult.cs
| ├─Filters
| | └DataValidationFilter.cs
| ├─Extensions
| | ├─DataValidationExtensions.cs
| | └DataValidationServiceCollectionExtensions.cs
| ├─Enums
| | ├─ValidationPattern.cs
| | └ValidationTypes.cs
| ├─Attributes
| | ├─DataValidationAttribute.cs
| | ├─NonValidationAttribute.cs
| | ├─ValidationItemMetadataAttribute.cs
| | ├─ValidationMessageAttribute.cs
| | ├─ValidationMessageTypeAttribute.cs
| | └ValidationTypeAttribute.cs
├─DatabaseAccessor
| ├─UnitOfWork
| | ├─Filters
| | | └UnitOfWorkFilter.cs
| | ├─Attributes
| | | ├─NonTransactAttribute.cs
| | | └UnitOfWorkAttribute.cs
| ├─Repositories
| | ├─EFCoreRepository.cs
| | ├─IRepository.cs
| | ├─ISqlRepository.cs
| | ├─SqlRepository.cs
| | ├─Implantations
| | | ├─DeletableRepository.cs
| | | ├─InsertableRepository.cs
| | | ├─OperableRepository.cs
| | | ├─ReadableRepository.cs
| | | ├─SqlExecutableRepository.cs
| | | ├─SqlReaderRepository.cs
| | | ├─UpdateableRepository.cs
| | | └WritableRepository.cs
| | ├─Dependencies
| | | ├─IDeletableRepository.cs
| | | ├─IInsertableRepository.cs
| | | ├─IOperableRepository.cs
| | | ├─IReadableRepository.cs
| | | ├─IRepositoryDependency.cs
| | | ├─ISqlExecutableRepository.cs
| | | ├─ISqlReaderRepository.cs
| | | ├─IUpdateableRepository.cs
| | | └IWritableRepository.cs
| ├─Pools
| | ├─DbContextPool.cs
| | └IDbContextPool.cs
| ├─Options
| | └DatabaseAccessorSettingsOptions.cs
| ├─MultiTenants
| | ├─Providers
| | | └IMultiTenantProvider.cs
| | ├─Locators
| | | └MultiTenantDbContextLocator.cs
| | ├─Enums
| | | └MultiTenantOptions.cs
| | ├─Entities
| | | └Tenant.cs
| ├─Models
| | ├─DatabaseProvider.cs
| | ├─PagedList.cs
| | ├─ProcedureOutputResult.cs
| | └ProcedureOutputValue.cs
| ├─Locators
| | ├─DbContextLocator.cs
| | └IDbContextLocator.cs
| ├─Interceptors
| | ├─DbContextSaveChangesInterceptor.cs
| | ├─SqlCommandProfilerInterceptor.cs
| | └SqlConnectionProfilerInterceptor.cs
| ├─Helpers
| | └DbHelpers.cs
| ├─Extensions
| | ├─DatabaseAccessorServiceCollectionExtensions.cs
| | ├─PagedQueryableExtensions.cs
| | ├─Repositories
| | | ├─IEntityDbContextLocatorExtensions.cs
| | | ├─IEntityExtensions.cs
| | | └SqlExtensions.cs
| | ├─DatabaseProvider
| | | ├─Penetrates.cs
| | | ├─SqliteServiceCollectionExtensions.cs
| | | └SqlServerServiceCollectionExtensions.cs
| | ├─DatabaseFacade
| | | ├─DbDataConvertExtensions.cs
| | | ├─DbObjectExtensions.cs
| | | └SqlAdoNetExtensions.cs
| ├─Enums
| | ├─DbFunctionType.cs
| | ├─EFCoreErrorCodes.cs
| | └ManualOptions.cs
| ├─Entities
| | ├─Dependencies
| | | ├─Entity.cs
| | | ├─EntityBase.cs
| | | ├─EntityNotKey.cs
| | | ├─IEntity.cs
| | | └IEntityNotKey.cs
| | ├─Configures
| | | ├─IEntitySeedData.cs
| | | ├─IEntityTypeBuilder.cs
| | | ├─IModelBuilderDependency.cs
| | | └IModelBuilderFilter.cs
| | ├─Attributes
| | | ├─FakeDeleteAttribute.cs
| | | ├─NonAutomaticAttribute.cs
| | | └QueryableFunctionAttribute.cs
| ├─Contexts
| | ├─AppDbContext.cs
| | ├─Builders
| | | ├─AppDbContextBuilder.cs
| | | ├─Models
| | | | └DbContextCorrelationType.cs
| | ├─Attributes
| | | └DbContextAttribute.cs
| ├─Attributes
| | └DbParameterAttribute.cs
| ├─Advances
| | ├─Proxies
| | | └SqlDispatchProxy.cs
| | ├─Models
| | | └SqlProxyMethod.cs
| | ├─Dependencies
| | | └ISqlDispatchProxy.cs
| | ├─Attributes
| | | ├─SqlExecuteAttribute.cs
| | | ├─SqlFunctionAttribute.cs
| | | ├─SqlProcedureAttribute.cs
| | | ├─Basics
| | | | ├─SqlObjectProxyAttribute.cs
| | | | ├─SqlProxyAttribute.cs
| | | | └SqlSentenceProxyAttribute.cs
├─CorsAccessor
| ├─Options
| | └CorsAccessorSettingsOptions.cs
| ├─Extensions
| | ├─CorsAccessorApplicationBuilderExtensions.cs
| | └CorsAccessorServiceCollectionExtensions.cs
├─ConfigurableOptions
| ├─Options
| | └IConfigurableOptions.cs
| ├─Extensions
| | └ConfigurableOptionsServiceCollectionExtensions.cs
| ├─Attributes
| | └OptionsSettingsAttribute.cs
├─Authorization
| ├─Penetrates.cs
| ├─Requirements
| | └AuthorizePolicyRequirement.cs
| ├─Providers
| | └AuthorizePolicyProvider.cs
| ├─Options
| | └JWTSettingsOptions.cs
| ├─Handlers
| | └AuthorizePolicyHandler.cs
| ├─Extensions
| | └PolicyAuthorizationServiceCollectionExtensions.cs
| ├─Attributes
| | └AuthorizePolicyAttribute.cs
├─App
| ├─App.cs
| ├─Startups
| | ├─AppStartup.cs
| | └HostingStartup.cs
| ├─Options
| | └AppSettingsOptions.cs
| ├─Filters
| | └StartupFilter.cs
| ├─Extensions
| | ├─AppApplicationBuilderExtensions.cs
| | ├─AppServiceCollectionExtensions.cs
| | └ObjectExtensions.cs
| ├─Attributes
| | └StartupAttribute.cs

1.2.5 Fur.Application 业务应用层

Fur.Application 业务应用层是最常用的层,几乎所有的业务代码都在这个层中编写。

源码结构:

Fur.Application
├─Fur.Application.Core.csproj
├─Fur.Application.Core.xml
└FurApplicationStartup.cs

1.2.6 Fur.Core 仓储实体层

Fur.Core 主要是存储自定义仓储和定义实体的层。

源码结构:

Fur.Core
├─Fur.Core.csproj
└FurCoreStartup.cs

1.2.7 Fur.Database.Migrations 数据库架构维护层

Fur.Database.Migrations 主要是用来存放 Database FirstCode First 生成的维护文件。

源码结构:

Fur.Database.Migrations
└Fur.Database.Migrations.csproj

1.2.8 Fur.EntityFramework.Core 数据库上下文配置层

Fur.EntityFramework.Core 主要是用来配置数据库上下文和其他数据库相关配置信息的。

源码结构:

Fur.EntityFramework.Core
└Fur.EntityFramework.Core.csproj

1.2.9 Fur.Web.Core 应用核心层

Fur.Web.Core 主要是用来配置 Web 入口一些代码,如 FilterMiddlewares 等。

源码结构:

Fur.Web.Core
├─Fur.Web.Core.xml
└FurWebCoreStartup.cs

1.2.10 Fur.Web.Entry 应用入口层

Fur.Web.Entry 是我们的应用层,也就是我们的 Web 项目层,发布层。

源码结构:

Fur.Web.Entry
├─appsettings.Development.json
├─appsettings.json
├─Fur.Web.Entry.csproj
├─Fur.Web.Entry.csproj.user
├─Fur.Web.Entry.xml
├─Program.cs
├─Startup.cs
├─wwwroot
| └README.md
├─Properties
| └launchSettings.json
├─Controllers
- + diff --git a/handbook/build/docs/specification-document/index.html b/handbook/build/docs/specification-document/index.html index 3136b707ab1..e8705b0999c 100644 --- a/handbook/build/docs/specification-document/index.html +++ b/handbook/build/docs/specification-document/index.html @@ -6,7 +6,7 @@ 5. 规范化接口文档 | Fur - + @@ -51,7 +51,7 @@
"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": null
}
}
}
]
}
}
}

5.5.12 在线测试

如下图所示:

5.5.13 性能监视 MiniProfiler

规范化文档默认集成了 MiniProfiler 第三方性能组件,通过该组件可以方便查看请求性能、异常堆栈、数据库操作等信息。默认在 Swagger 首页左上角显示。

如下图所示:

小提示

也可以通过 appsetting.jsonAppSettings:InjectMiniProfiler 设为 false 关闭。

5.5.14 定义接口输出类型

using Fur.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
namespace Fur.Application
{
public class FurAppService : IDynamicApiController
{
[ProducesResponseType(201, Type = typeof(TestDto))]
[ProducesResponseType(400)]
public string Get()
{
return nameof(Fur);
}
}
}

如下图所示:

5.6 SpecificationDocumentSettings 配置

除了上述例子外,Fur 提供了一些配置选项,如:

  • DocumentTitle:文档标题,string,默认 Specification Api Document
  • DefaultGroupName:默认分组名,string,默认 Default
  • EnableAuthorized:是否启用权限控制,bool,默认 true
  • FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false
  • RoutePrefix:规范化文档地址,string,默认 string
  • DocExpansionState:文档显示方式,DocExpansion,默认 List,取值:
    • List:列表式(展开子类),默认值
    • Full:完全展开
    • None:列表式(不展开子类)
  • XmlComments:程序集注释描述文件名(可带 .xmlstring,默认 Fur.Application, Fur.Web.Entry, Fur.Web.Core
  • GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
  • SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 []

5.7 反馈与建议

与我们交流

给 Fur 提 Issue

- + diff --git a/handbook/build/docs/split-db/index.html b/handbook/build/docs/split-db/index.html index bc8014df7a6..379344dd281 100644 --- a/handbook/build/docs/split-db/index.html +++ b/handbook/build/docs/split-db/index.html @@ -6,7 +6,7 @@ 8.26 分表分库 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/tran/index.html b/handbook/build/docs/tran/index.html index 76b65843dba..b1b01481df0 100644 --- a/handbook/build/docs/tran/index.html +++ b/handbook/build/docs/tran/index.html @@ -6,7 +6,7 @@ 8.24 事务和工作单元 | Fur - + @@ -29,7 +29,7 @@
var blogs = _testRepository.Entity
.OrderBy(b => b.Url)
.ToList();
// 提交事务
transaction.Commit();
}
catch (Exception)
{
// 回滚事务
transaction.RollBack();
}
}

8.24.4 工作单元特性说明

8.24.4.1 [UnitOfWork]

[UnitOfWork] 特性用来标记事务信息,如作用范围,隔离级别等。

  • Enabled:是否启动工作单元,默认 true
  • ScopeOption:定义事务范围行为,默认 TransactionScopeOption.Required
  • IsolationLevel:设置事务隔离级别,默认 IsolationLevel.ReadCommitted;
  • AsyncFlowOption:允许跨线程连续任务的事务流,如有异步操作需开启该选项,默认开启
特别注意

一旦方法贴了 [UnitOfWork(false)] 特性后,那么该方法不再启用工作单元模式,也就是不包含事务,也不会自动提交数据库。慎用!

8.24.4.2 [NonTransact]

一但方法或类贴了 [NonTransact] 特性,那么将关闭事务操作,但是还是会自动保存数据库到数据。

8.24.5 常见错误

  • A TransactionScope must be disposed on the same thread that it was created.

只需要在当前操作方法上贴 [NonTransact] 特性即可。

8.24.6 反馈与建议

与我们交流

给 Fur 提 Issue


了解更多

想了解更多 事务 知识可查阅 EF Core - 使用事务 章节。

- + diff --git a/handbook/build/docs/unittest/index.html b/handbook/build/docs/unittest/index.html index 6b699ef1d57..6f1ddbcadc8 100644 --- a/handbook/build/docs/unittest/index.html +++ b/handbook/build/docs/unittest/index.html @@ -6,7 +6,7 @@ 25.1 单元测试 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/docs/view-engine/index.html b/handbook/build/docs/view-engine/index.html index 613e2cc9c46..b99fd027084 100644 --- a/handbook/build/docs/view-engine/index.html +++ b/handbook/build/docs/view-engine/index.html @@ -6,7 +6,7 @@ 16. 视图引擎 | Fur - + @@ -26,7 +26,7 @@ - + diff --git a/handbook/build/img/readwrite.png b/handbook/build/img/readwrite.png new file mode 100644 index 0000000000000000000000000000000000000000..84e5d64901e71621aeb7cc947e259b2a6a052070 GIT binary patch literal 161829 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

-xv(a_PFfSU0t)597 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%0A1@= zF3B=z${+#kI4JnRO_9SZeP~CanEFEN0Fu1_x|iIT_rdbQiyuKoqLNM)vD9j=?K<=KT4^7XV;gLIG zRA}?wZd%sSott8jODz!eEl_9g^y&N7-CW&Ha)Jv2 z6f9`j`Pm%~@ePlk33a6sivDwqT4V)0@7!WflskOzi%v^QqLC`d6DN|IK`=N zcc4;Ey+wIb7pK>Pe911ep3wzHg$>c1d%Y9_28pVnQnUImdLhn=ud0OI>j0~+y1YUZ zxKqerJ%%{rX&CPR*x$aFa#NbR?KV_{nctGIw zPY!?XkC36E16PAt^}N1G%U?u8gL+AsQ1Eu6rkX3&fClDIc3=Iv%z3@Aluktx<-ILGXl?Pb{&?G%UL!#>c^QyNg z&Y|R?s7ycJa-2AFp&}P&Af>ARf^YLzU{tVxVi#n!^LeIK%9|4o%xmTTy%T!Ur%|bS zbW^3`i?{Q8!A4K^1qwsksO$_ZC^HB__d{F#;vXLD9UA`r^_nn z>3@HkT>KR!Gvl1Y&6A;FDpo}QsgeT>{s9z5MSyNSnRmmnkd!KkzW9Mo%7a6m z3FZ`*kT5z2CdyR-dG&O9j0(IPw0L^zm_xEdH3t*D4Dr$QAi(aZhn1#Ewh-s5H~n_- z>-!AO?k#(&Y^+r$fa_Dk^2o}}MB`+%S0KbER$ZtH$l-QZ)T-9kaF+<*_4qwMpxhlJ zTVCz{%?BZ3*7Yc}t=dq_*EZJT9ft9N9tS%|d26G7J+CE^$mcKRv&$T|>I|Edf<+g4 zOp66&aKa1SggGu$FpCgzR_Tp;8yJ&*q-S9A+YguyKjTUb$EG}+E(!bU6~P(zPu{b4q?w4=OW%AOt_LYlWNEs>vdn+g~1 zj(oF8-_8Pez_`-%peL<9ae10|vX@u2=MZEmXiCUv^MF(UV_Y3=veqh=39>j`Epl2>#^WtH z+aF)DOQ;c+l<~t5U>%-JNkHesp~H|W(N9Fm0@F3qa`NLC8Eq6+Qk0U z)zGjW>S&=*uu}E+7vS}NOqs}Q2U6DB%T506oc8NKni4n_c7Ki*Zsf_A8B2!VJOn-` zz7_z!{z3Q4!fPqesl!m~C?`>-hZqCgL(?d@OsXew1iR*l3&rGr zUT-&E+nXFWN+BDh(~)_87H1bbxociBbLBIZaY&T7&=K1EY1lXS^W#kMmXY?J`JL|H zn(USePgd4d?G;ib1S1OiI;~w|kPwH02P0ZulcMrg0sk9r3=fRkQ`7Y*`$m1NA6umV7KwB(#Ywd&z%{5sr7ayggoO zqJ&!SPyNV^S!A*rRY>}ezNrIrpA_1*P5HKmNFf9x7{R26J;RjO=47N(UqfA#g?)7*4_x&?Gqi&5?{PCmZhfi%jkOn3_UhAP&Fi9i^nX1EOn@k_T zF(?6W!TY~6>f1a{V&3LqAMKv3sMh5dY(e8(^5}QE=ntA;s^AQ0q?W5YD%Eto>=L2S zNNz0rSS|znI_sU$y_E76A|ytghF?@a$v<|GFc>!dt7abHOH42a?kE;Fc|!i808V=< z;|iG8?$J!+>OG!2SFo_*rxtj>cBYXfyMK8=**3RQIaEs1d48yA?|&mf!gHRQKzzTv znq<)CryoB)ZsTCP(BX~J;Jl^-?0|ZybN0B^Ep3N!1O{Zhego;G_&V*q!K?L3hM=UlLL_1Q1$7F^)ls**!bA zwJfjzr{3Spzwif&5b=U)Vsl`PMGG9^gx25F8|GK=TYNiwNck{f<$X!JYYOsrDXku zG^Z0>Q6l$kKRm4|o$0T$7?arH5t(u+Ymxegg1S1anMf&xvXWL3?NC*E`l_%;A9%O( z9xVOt05Ot!3+uVV)WiMs@-I_Z@iz%{sfra*&USUhyWeovPP?k~1RdLn>});U*HArS ziuD8$=fy$h*9X`#8SN8ScuY16)oZ-ITZQx$l?^UCvi8eAHJH19$}o4;s%SA8sI#Qb zFAfwB4NJ0DRskJj`#&KQ9_Fe@{*ar1wx3=_e#0Rgu^U+SwKWZnbk83zdh5 z4fK^!l6vap_=Gv4Pdagk?X_P#xMHvS;WwG7xlokdL<%=neRbT7FFU{)dScJ@b7-MR zutAR)SV1b`rd$0GT2!beC}MFW3oN&xVBU|DfALdWzNA@RU;+C)u8Jj|3!i4*%OFCSVm+(I441`t-wB8MZ6h z&R40)$yG8Lw*DxRO01}9RsupYGtt|_jO2?=8_$x=_TKugcns}u#KejU`l>W8`?;Zb=8tKUqfqk#iUH zkeI4aqv%CcC_TyJBbAqyj_TR`)l4o@2RX|O7N;=44X{lohRc0Bj5krqa`gtN4%WRP z51D+9UEWIh9&xU=gqgFm>jjT(Hs)X9=G4sr%hROu>GbS+daP#uvGJ(QqjT&LY`?4D`}v8f8JNVZdGxhdXW0$LEvX1OoPCgZU2CVQ06IYsbb zkNcveF>Ox*l%X_1OpxTYJ%>?u6i@zYkXm5+%-(IjkeaxD0w_3maZyRVVcv zthpQ^Zcn#{<;vNA_Rq_Bmn|zllONj4lH`!+G+%f(PG(j$-D)x#wk>vCq@>JV?u^Z? z&sV>^7yw3y4hkLvtCpGcDkP|f*X3UnFs0pIvOXh4{-m(9RPznh@K-`kfeR~|p|>_h z0yX=q#a$4nDMen#Y^&{&_sTOajPl$&ZXiul86qqTZ56Wiu6m@~0pe4&R%>wM?rvje z1s3Jc8nu-c`tIaG9e|<|Mnn)phmett=Abn461;tE~KV zv+DYZ5sL5~AXx1Zu%#-dsq4xyz~E;J|4m$z>VbvN4L!aUjM^}U$O)ujuLcCx+-+qD zB{C_-;ZSLVp&9%D;5JKVAeCX95U%)apwsIJ0hbR$fY)n*U|OLwN$St3q0Z%Yt&P78 z_%MmcFgvET&o3&CL<>)5K;K}^)8BJgw~I*Dz|$ef)@)X-&i6wMSd{hr1B>df&>+xL zqjtSTh6;+2722$wZe!)$GIzAwV)gS4IiHj9)jYPUdaZq7opiZHNK0$qf3#+9R zjM@T7b9%`pi+cJR_GdT}U{r>~FvVSYqS>+bDR}E^g!F$`Jlo}n9i05ECjP?)FrEI0 zGNWzc89z0-R8vI_u(4Ani?H8yh%s5($R4PVx_$D#)8nix04t+_MIS}|8!#B|Ij?hW z@24!+SJI(g77@S|LSA^w82f?SK0kz%X2>>ZyoNU+&o2gNzt{qL63LvlQM0x8@4G-Q zVxtmJU@8O5=anXVHh4hB#0Pi5p;k0Ycnk55KmEIFzy?$t()Tb^&fBK%O=2%v9XAB8 zRKwQ+##gsJscsL+Chib;duq6NL9AU6USRx;tU<}S%a9Y)b=00Fw7ov_Iq>rez8bd> zxgavkyCDiwm%$huAIQyug78nHUKs3{TE&Z^xJ1MJJ$K3B-0!JkY5Xq?nce(`fK|Mi z1_eFj;zleMC`|d4lZU08XbrZ_%TzdZj$^sSC75@`;$vP8`y*q<$Y-c!Rk{KMpvC_2 zk}MyI=H1~ZI%>u?CUJS*R24b7`rYxc`FAE+JO$H|qL@%ygPMz%Ie1M2Zc3U-LDJw^MO&Y^)tP z!``QE`gC(k389mrxKkXK3Z#=5N%D#d-h|>u(**@P^st-TW6?102q%yW7Y}sAVjmpW z=I5%bd{MD?Z=|RH#7L%FDNa}YOC4V@7-=6H96p5lOpKM! z;8lO=Ngp`5|MaR_Q*?&!FJ$yD409nMDbKfyEUdfz_4xFZvk!TW43`ULzpj7a@9k;( zS!OYcsI8UNuOV3Xdr+xE7pzo+P_e{WC&ruN54-?%+Y14=eygv4^3rZt_T3*lg%T$x z;X%*sZ0OIKT#4&X_!MhbwOw^Db+@&+MQtcd;#SR;lcce!eLe$ z{ABzM_BxmAV9Wz^yBT=8;wjF5i@sd~&w}Euqsboz_>?zs8H9K%%nFM~L=~4*MMlJ@ z{hq}(!Oj=^{o-Ls?$PYh!7|6*1W zu3Uiz9HPX3rAXteI>W4eL3t>jjM@q!t>=}Y#IXN^+kM7cc=9#vvY4lL&%ZPQso0@4 zdu~z@&R*$`5|~hlBZQvY3#E+Ej*Snp6dUQHSoRZHQtfd{iX=m@cRimlz&isik%6HK z1_lfnae0+`C%Qea+a-)q;x{#o4E)SssSR<%K90}!cMyT8wKLi}fAP(P?C>laFrzcKyMTs8fO`$>Oj0~?rCU~+!W zZrghkCT#)J{2v{~G4v zgmzA{a;Eu86C6aD<#Hq)uho#pD&TkgCrm$x!|=X(YTt_^~@utF2hAIYlv zpG;FF@R7RjI?ydIeGQ*GpK~9_5`9Zj_q?Z1$2PtL=@-M?2Un##_H}{BINy!&zeH;t z-fDcFr|fHi9Z=A^#jo8D1xF73IWeSM#R#oL1s9+WtXabWC9i{~&9Gz*us( zq-#UT``As+gP2^x%qkYQ%$<1;JJ;u zKmJy1^Y)%4bkhaj5axXy=DmzOlt_QNRj}G<7+4j}EmV}wy-ZTnu5Mrad%Y%83MTkL zV7vyhPP!`QBjLkdvlly0G%m&)nMZfDFy)u~{kawAC0FS1N>JkH_7ReyrItH9Q)GD- zxp%|+e0(s)8gSy>LTkwG=-p{R<8ymCyF)c;!Eit9(!=DK?y-b z!i_}>`|7LpuwRtu23UhvcZm%#n}+xe#>WxYWMcNq#o5>zvq)Pz?yd>9Yor5#z&AQ3 zj9@9`*fhQV4E(@xH)R_*kwLbd;$wu#&%Bn8DwO-Mc=NOPf3KXoC_ z3lc!!{{A0)6mnhqNcbm<}9&J4|m%L_SZwGic zfYsF?yh+Oft%QR4_s)xx0xINgaPujN|A9O%iN9{&2tUCs=2!P~k|J;!8R~e=Z;zoR zFa8WhUXQ?53wX5?6$m&QMuHx?=?sXI7-AJlR~_QCo^q?ExTc#--@$u3p5TCp5uUtE z^?t@83l3U9;gH+GDdq{*m)U_4KUE52w%S+s2;lk9TOyc^CBzuja z?@I37)2MfVkgtG&;BvxVv>;{G^ZL>G^VF5+PUl9wmCrS=&RKE*$w_nn@Jx2u7AZ^= zTWmz-gYdnR7tbWd7m&&%!41Fw6n+LA4ij z5a@0mxMv2Ia8OVp37Kv-fon0F!aV5^X=cYX$>p&EU3f>@}qDP{e{)d z{C?-`3dV2-u-+N`pe&FuECzT!K zsYD+qVhM8U_BxtpG&NaT3i)Fqh2qEnw3JNZOf509trLbXiXL^GJB7((lJzSvOk;eg zZA1oe$!|x2sKU)4p5bEp$3PtqZIntcttG}$$ z`g*r*1a7!aY6SpKamsS)2za2fiKP-Xfzqv32GwU8lbzF}V-jb9(l2MDPx_OECy;m5 zInrA>&&y9Iu`maif|yd$qJXvK)Iy6f*%}FUX(Vkbc=O6SUtgYZ|G<~O{~Cx7)wjAm z7cv-WZ$0Yb<$E1&ImOm*QG2*|zxs3~hB@#4-8GSI=ngYNRDo()-IleW2Si_* zcKm{F8%Gj~Lk?d(09+zYv<^6J@CXR;#u5T$K+~)Ox|~cCS|3c8_#9O=|Axh^5N42-Rxtk1kqx^L9e9QUxw4(a1_YXC z_5a7zR|dt|Hq9c7yF>7x!Ce=3cXtUA+}+)R+XE~f+&#E1t_c#{AwY1qv%FPb)%m|w z_g*&A)6;{696L}%sx%%0fRD-&ou&!XF-KpVnb#aX z{NVRW%Vko;QUuS6No|tLEkGvl>YQzKuXK6h@{y( zB_=1d$`e8C^L;nw#c)3X=5&b*{H2>{U+@k8tl!9buHUU0V@GM}Ff~NT9TQlRC+Ibe z8m#u-kC}Dl)O8sNQJ57W`~c!mVdLUCiDcy`2yo9cxyc~WrMD#Jh0DQph!y1P*6yW5 zs{kW&f_R{?Hc@AwH|d&$rI=|0EY#e7Cjtn(dg)h31yLA$D8y`E(!JsWul_<3mWhU? z3T`Wal-^LnOtYX*Vf$82{VyfBM=$v;GF{`f#yJku62i<1lmWuO208!P=H$1X1za{v zcbmM=dL>+gF}+hLK9)DX6#aZPO9@p3Z`K6c#|;XYr5gUd_Pa_4ZJS)sb23RpQs`+0 zQ%NR~jC*$zL-?VOy6i~8X|rejS5OA4i6a0T1uZUy6+ictfE5$tRbvG24H1zIJufQ? zD|q>m{S(bw_cxG>mhq<}n{IfBk=cjuSxGiFqRXWTsB}(0}>S`vp-ZsQMUj zIdbZ_+NuO8RyJLpC^E&f-?1+D1V0l^l!q0WhqFaDB>Ixv3gTR3nXo#tMD|&PecUh} zRWOqGUa(>sL&nh537jyZd@L%s2+k+X(!tP35|JL|hlIr

g#KsSJGEdk5t{O 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

Nma9@Jm6Q~m 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 z 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 literal 0 HcmV?d00001 diff --git a/handbook/build/index.html b/handbook/build/index.html index b37cdd18158..69fd44d1076 100644 --- a/handbook/build/index.html +++ b/handbook/build/index.html @@ -6,7 +6,7 @@ Fur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。 Fur | Fur - + @@ -22,7 +22,7 @@

Fur 是 .NET 5 平台下极易入门、极速开发的 Web 应用框架。

[object Object]

.NET 5 新起点

.NET 5 是 .NET 的重要且令人兴奋的新方向。你会看到 .NET 变得更加简单,但也有更广泛的功能和实用程序。所有新的开发和功能都将是 .NET 5 的一部分,包括新的 C# 版本

[object Object]

“六级” 架构

Fur 在设计之初就秉承着 “六极” :极易入门、极速开发、极少依赖、极少配置、极其灵活、极易维护 的设计思想,在架构设计上做了大量的优化,支持各个能力阶层技术员极速上手。

[object Object]

冲一杯咖啡的时间

Fur 除了独具创新的设计理念和灵活的架构设计以外,同时还结合了主流的敏捷开发模式打造的一款极速开发框架。只需冲制一杯咖啡的时间便可完成工作

- + diff --git a/docs/runtime~main.4a5fdd96.js b/handbook/build/runtime~main.597985d1.js similarity index 97% rename from docs/runtime~main.4a5fdd96.js rename to handbook/build/runtime~main.597985d1.js index 14eb444a032..c276d530062 100644 --- a/docs/runtime~main.4a5fdd96.js +++ b/handbook/build/runtime~main.597985d1.js @@ -1 +1 @@ -!function(e){function f(f){for(var c,r,t=f[0],n=f[1],o=f[2],u=0,l=[];u + +### 8.25.1.1 解决了什么问题 + +大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。 + +用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。 + +### 8.25.1.2 注意事项 + +- 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加; +- 为了保证高可用,读连接池要能够实现故障自动转移; +- 主从的一致性问题需要考虑。 + +## 8.25.2 如何实现 + +`Fur` 在数据库模块设计之初,就考虑了读写分离这种情况,所以从底层就支持动态切换数据库上下文及读写操作方法约束。 + +## 8.25.3 主从复制 + +### 8.25.3.1 `SqlServer` 配置 \ No newline at end of file diff --git a/handbook/docs/introduce.mdx b/handbook/docs/introduce.mdx index a93c5fa1d03..e81794fa4a9 100644 --- a/handbook/docs/introduce.mdx +++ b/handbook/docs/introduce.mdx @@ -72,7 +72,7 @@ import useBaseUrl from "@docusaurus/useBaseUrl"; ## 🍿 Docker 镜像 ```shell -docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.02 +docker run --name fur -p 5000:80 monksoul/fur:v1.0.0-2020.10.03 ``` ## 🥞 架构设计 diff --git a/handbook/static/img/readwrite.png b/handbook/static/img/readwrite.png new file mode 100644 index 0000000000000000000000000000000000000000..84e5d64901e71621aeb7cc947e259b2a6a052070 GIT binary patch literal 161829 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

-xv(a_PFfSU0t)597 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%0A1@= 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

g#KsSJGEdk5t{O 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

Nma9@Jm6Q~m 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 z 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 literal 0 HcmV?d00001