1import{_ as i,c as a,d as n,o as l}from"./app-rplj-UlT.js";const e={};function h(t,s){return l(),a("div",null,[...s[0]||(s[0]=[n(`<p>åºäº C# / .NET 10 çæçä¼ä¸çº§å®ç°ï¼æ·±åº¦éæ Entity Framework Coreã</p><h2 id="æ ¸å¿ç¹æ§" tabindex="-1"><a class="header-anchor" href="#æ ¸å¿ç¹æ§"><span>æ ¸å¿ç¹æ§</span></a></h2><h3 id="net-çæ" tabindex="-1"><a class="header-anchor" href="#net-çæ"><span>.NET çæ</span></a></h3><ul><li>C# 10</li><li>.NET 10</li><li>EF Core 深度éæ</li><li>ASP.NET Core</li></ul><h3 id="ä¼ä¸çº§ç¹æ§" tabindex="-1"><a class="header-anchor" href="#ä¼ä¸çº§ç¹æ§"><span>ä¼ä¸çº§ç¹æ§</span></a></h3><ul><li>äºå¡æ¯æ</li><li>ä¾èµæ³¨å ¥</li><li>ä¸é´ä»¶</li><li>è§èå设计</li></ul><h3 id="æ§è½ä¼å" tabindex="-1"><a class="header-anchor" href="#æ§è½ä¼å"><span>æ§è½ä¼å</span></a></h3><ul><li>弿¥ç¼ç¨</li><li>ç¼åæºå¶</li><li>ç¼è¯ä¼å</li><li>æ§è½çæ§</li></ul><h2 id="å¿«éå¼å§" tabindex="-1"><a class="header-anchor" href="#å¿«éå¼å§"><span>å¿«éå¼å§</span></a></h2><h3 id="å®è£ " tabindex="-1"><a class="header-anchor" href="#å®è£ "><span>å®è£ </span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># .NET CLI</span></span> 2<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">dotnet</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> new</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> install</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> sharpclaw</span></span> 3<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">dotnet</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> new</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> sharpclaw</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -n</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> MyAgent</span></span> 4<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cd</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> MyAgent</span></span> 5<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">dotnet</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> run</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="é ç½®" tabindex="-1"><a class="header-anchor" href="#é ç½®"><span>é ç½®</span></a></h3><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-csharp"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// Program.cs</span></span> 6<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">var</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> builder</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> WebApplication</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">CreateBuilder</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">args</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span> 7<span class="line"></span> 8<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// æ·»å Agent æå¡</span></span> 9<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">builder</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">Services</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">AddSharpClaw</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">options</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> =></span></span> 10<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">
10{</span></span> 11<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> options</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">LLMProvider</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">openai</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span> 12<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> options</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">ApiKey</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> builder</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">Configuration</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">OpenAI:ApiKey</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">];</span></span> 13<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">});</span></span> 14<span class="line"></span> 15<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// æ·»å EF Core</span></span> 16<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">builder</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">Services</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">AddDbContext</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"><</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;">AgentDbContext</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">>(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">options</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> =></span></span> 17<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> options</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">UseSqlite</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Data Source=agent.db</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">));</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="ææ¯æ¶æ" tabindex="-1"><a class="header-anchor" href="#ææ¯æ¶æ"><span>ææ¯æ¶æ</span></a></h2><h3 id="æ ¸å¿æå¡" tabindex="-1"><a class="header-anchor" href="#æ ¸å¿æå¡"><span>æ ¸å¿æå¡</span></a></h3><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-csharp"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// Agent æå¡</span></span> 18<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">public</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> AgentService</span></span> 19<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">
19{</span></span> 20<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> private</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> readonly</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> ILlmClient</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> _llm</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span> 21<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> private</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> readonly</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> AgentDbContext</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> _db</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span> 22<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 23<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> public</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> async</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> Task</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"><</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">string</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> ChatAsync</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">string</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> message</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 24<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span> 25<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 弿¥å¤ç</span></span> 26<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> var</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> await</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> _llm</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">CompleteAsync</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">message</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span> 27<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 28<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // EF Core ä¿å</span></span> 29<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> var</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> record</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> new</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> ChatRecord</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> Message</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> message</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> Response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> };</span></span> 30<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> _db</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">ChatRecords</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">Add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">record</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span> 31<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> await</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> _db</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">SaveChangesAsync</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">();</span></span> 32<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 33<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span> 34<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span> 35<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="ç¸å ³é¾æ¥" tabindex="-1"><a class="header-anchor" href="#ç¸å ³é¾æ¥"><span>ç¸å ³é¾æ¥</span></a></h2><ul><li><strong>GitHub</strong>: <a href="https://github.com/imxcstar/sharpclaw" target="_blank" rel="noopener noreferrer">imxcstar/sharpclaw</a></li></ul><hr><div style="text-align:center;padding:2rem 0;"><a href="https://github.com/imxcstar/sharpclaw" target="_blank" style="display:inline-block;padding:0.8rem 2rem;background:var(--vp-c-brand);color:white;border-radius:8px;text-decoration:none;font-weight:600;"> è®¿é® GitHub ä»åº â </a></div>`,20)])])}const p=i(e,[["render",h]]),r=JSON.parse('{"path":"/ecosystem/sharpclaw/","title":"SharpClaw - .NET ä¼ä¸ç | çæç³»ç»","lang":"zh-CN","frontmatter":{"title":"SharpClaw - .NET ä¼ä¸ç","createTime":"2026/03/07 18:10:00","permalink":"/ecosystem/sharpclaw/","de
35scription":"C# / .NET 10 çæï¼éæ Entity Framework Core","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"SharpClaw - .NET ä¼ä¸ç\\",\\"image\\":[\\"/lobster.svg\\"],\\"dateModified\\":null,\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"OpenClaw\\"}]}"],["meta",{"property":"og:url","content":"https://openclawgithub.cc/ecosystem/sharpclaw/"}],["meta",{"property":"og:site_name","content":"OpenClaw 䏿æç¨"}],["meta",{"property":"og:title","content":"SharpClaw - .NET ä¼ä¸ç"}],["meta",{"property":"og:description","content":"C# / .NET 10 çæï¼éæ Entity Framework Core"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"/lobster.svg"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"name":"twitter:creator","content":"openclaw"}],["meta",{"name":"keywords","content":"sharpclaw,dotnet,c#,entity framework,ä¼ä¸ç"}]]},"readingTime":{"minutes":0.98,"words":293},"git":{"createdTime":1788971858000},"filePathRelative":"ecosystem/sharpclaw.md","headers":[]}');export{p as comp,r as data};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.