<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI Apps | The .NET Blog</title><link>https://thedotnetblog.com/tr/tags/ai-apps/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>tr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sun, 26 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tr/tags/ai-apps/index.xml" rel="self" type="application/rss+xml"/><item><title>SQL Server 2025 ajanlara hazır veritabanı olarak: güvenlik, yedekleme ve MCP tek bir motorda</title><link>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>Polyglot Tax serisinin son bölümü, üretimdeki zor sorunları ele alıyor: ilişkisel, JSON, graph ve vector veriler üzerinde birleşik Row-Level Security, ayrıca SQL Server 2025'i gerçekten ajanlara hazır hale getiren kriptografik denetim izleri ve MCP entegrasyonu.</description><content:encoded>&lt;p&gt;&lt;em&gt;Bu gönderi otomatik olarak çevrildi. Orijinal versiyon için &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Aditya Badramraju&amp;rsquo;nun Polyglot Tax serisini büyük bir ilgiyle takip ettim. 1-3. bölümler, SQL Server 2025&amp;rsquo;i gerçekten çok modelli bir veritabanı olarak güçlü biçimde savundu — JSON, graph, vector ve ilişkisel veriler tek bir motorda, birleşik bir query planner ile. 4. bölüm, bu mimariye production&amp;rsquo;da gerçekten güvenip güvenmeyeceğinizi belirleyen kısmı kapatıyor.&lt;/p&gt;
&lt;p&gt;Spoiler: production hikayesi sağlam.&lt;/p&gt;
&lt;h2 id="tüm-veri-modelleri-için-tek-güvenlik-modeli"&gt;Tüm Veri Modelleri İçin Tek Güvenlik Modeli&lt;/h2&gt;
&lt;p&gt;Poliglot stack&amp;rsquo;lerin sorunu şu: bir denetçi &amp;ldquo;Tenant A&amp;rsquo;nın Tenant B&amp;rsquo;nin verisini göremediğini kanıtla&amp;rdquo; dediğinde, bu soruya her veritabanı için ayrı ayrı cevap vermen gerekir. Beş veritabanı, beş güvenlik modeli, beş kanıt.&lt;/p&gt;
&lt;p&gt;SQL Server 2025 ile tek bir Row-Level Security policy tanımlarsınız ve bu tüm veri modellerini kapsar:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FUNCTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RETURNS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SCHEMABINDING&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fn_result&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SESSION_CONTEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TenantID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECURITY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;POLICY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TenantIsolation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Relational
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- JSON data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Relationships&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Graph edges
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Embeddings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Vector data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;STATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O noktadan sonra her query — ilişkisel join&amp;rsquo;ler, JSON path sorguları, graph traversalları, vector similarity aramaları — otomatik olarak tenant&amp;rsquo;a göre filtrelenir. Motor, storage&amp;rsquo;dan herhangi bir veri çıkmadan önce predicate&amp;rsquo;i execution plan&amp;rsquo;a enjekte eder. Çağıran kodunuzun her yere &lt;code&gt;WHERE TenantID = @id&lt;/code&gt; yazmasına gerek kalmaz. Policy&amp;rsquo;yi bir kez test edersiniz.&lt;/p&gt;
&lt;p&gt;Katmanlar da birbirini tamamlar: bazı rollerin tam değerleri görmemesi gereken kolonlar için Dynamic Data Masking, uçtan uca şifreleme için Always Encrypted (DBA&amp;rsquo;lar bile okuyamaz), ve ajanların yalnızca açıkça expose ettiğiniz şeyleri çağırması için izin sınırı olarak stored procedure&amp;rsquo;ler.&lt;/p&gt;
&lt;p&gt;Bu, compliance ağırlıklı SaaS için mimarinin en önemli kısmıdır. Tek policy, tek kanıt.&lt;/p&gt;
&lt;h2 id="birleştirilmiş-yedekleme--atomik-kurtarma"&gt;Birleştirilmiş Yedekleme = Atomik Kurtarma&lt;/h2&gt;
&lt;p&gt;Tek bir komut, tüm veri modelleri, tutarlı bir zaman noktası:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BACKUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;COMPRESSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENCRYPTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ALGORITHM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AES_256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SERVER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CERTIFICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BackupCert&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;RESTORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STOPAT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2026-02-01 10:30:00&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Poliglot bir stack&amp;rsquo;te beş veritabanı boyunca point-in-time recovery yapmak, beş restore işlemini koordine etmek ve timestamp&amp;rsquo;lerin bir iki saniye içinde hizalanmasını ummak demektir. Finansal veri için bu iki saniyelik tutarsızlık kabul edilemez. Tek veritabanı, tek transaction log, tek restore — recovery tanım gereği atomiktir.&lt;/p&gt;
&lt;h2 id="kurcalamaya-dayanıklı-denetim-izleri-için-ledger-tabloları"&gt;Kurcalamaya Dayanıklı Denetim İzleri için Ledger Tabloları&lt;/h2&gt;
&lt;p&gt;Düzenlemeye tabi sektörlerde &amp;ldquo;loglarımız var&amp;rdquo; demek yetmez. Bu logların değiştirilmediğine dair kriptografik kanıta ihtiyacınız vardır:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FinancialTransactions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AccountID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MONEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYSUTCDATETIME&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_VERSIONING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LEDGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Her insert, update ve delete, blockchain benzeri bir yapıya kriptografik olarak hash&amp;rsquo;lenir. Bir satırın yazıldığı andan beri manipüle edilmediğini bir denetçiye matematiksel olarak kanıtlayabilirsiniz. Poliglot stack&amp;rsquo;te bu yetenek tüm veritabanlarınızda aynı şekilde mevcut değildir.&lt;/p&gt;
&lt;h2 id="mcp-entegrasyonu-elle-kodlanmış-middleware-olmadan-agentlar"&gt;MCP Entegrasyonu: Elle Kodlanmış Middleware Olmadan Agent&amp;rsquo;lar&lt;/h2&gt;
&lt;p&gt;Seri tam olarak buraya doğru ilerliyordu: SQL Server 2025, SQL MCP Server&amp;rsquo;ı doğrudan destekliyor; yani agent&amp;rsquo;larınız her işlem için middleware yazmadan doğal dil tool call&amp;rsquo;larıyla veritabanını çağırabiliyor.&lt;/p&gt;
&lt;p&gt;Bunu stored procedure&amp;rsquo;leri izin sınırı olarak kullanmak ve Row-Level Security&amp;rsquo;yi motor seviyesinde uygulamak ile birleştirdiğinizde şu modeli elde edersiniz:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agent bir tool çağırır, örneğin &amp;ldquo;12345 hesabı için müşteri bağlamını getir&amp;rdquo;&lt;/li&gt;
&lt;li&gt;MCP bunu tanımladığınız stored procedure&amp;rsquo;e çevirir&lt;/li&gt;
&lt;li&gt;SQL engine tenant izolasyonunu ve column masking&amp;rsquo;i otomatik uygular&lt;/li&gt;
&lt;li&gt;Agent yalnızca görmeye yetkili olduğu veriyi alır&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Middleware katmanı yok. Ad-hoc query injection riski yok. Authorization&amp;rsquo;ı agent değil, engine yönetir.&lt;/p&gt;
&lt;h2 id="bunun-net-geliştiricileri-için-önemi"&gt;Bunun .NET Geliştiricileri İçin Önemi&lt;/h2&gt;
&lt;p&gt;Eğer .NET servisleri geliştiriyor ve SQL Server&amp;rsquo;ı birincil veri deposu olarak kullanıyorsanız, bu serinin mesajı şu: caching için Redis, ilişkiler için graph database, embeddings için vector store eklemenize gerek yok. SQL Server 2025 bunların hepsini halleder — poliglot bir stack&amp;rsquo;ten daha iyi operasyonel tutarlılıkla ve gerçekten denetlenebilir birleşik güvenlikle.&lt;/p&gt;
&lt;p&gt;MCP entegrasyonu, Semantic Kernel agent&amp;rsquo;larınızın veya Microsoft Agent Framework workflow&amp;rsquo;larınızın aynı SQL MCP Server üzerinden veri katmanınızla etkileşime girebileceği, insan sorgularına uygulayacağınız aynı güvenlik garantileriyle çalışabileceği anlamına gelir.&lt;/p&gt;
&lt;h2 id="kapanış"&gt;Kapanış&lt;/h2&gt;
&lt;p&gt;Polyglot Tax serisi baştan sona okunmaya değer. 1-3. bölümler query planner hikayesini kanıtlıyor. 4. bölüm production hikayesini kanıtlıyor. Azure SQL üzerinde agent-first veya AI-augmented uygulamalar geliştiren .NET geliştiricileri için bu mimari ciddi biçimde düşünülmeyi hak ediyor.&lt;/p&gt;
&lt;p&gt;Aditya Badramraju&amp;rsquo;nun orijinal yazısı: &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Copilot'a Günde 68 Dakika Kodu Yeniden Açıklamak mı? Bir Çözümü Var</title><link>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/auto-memory-stop-re-explaining-code-to-copilot/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/auto-memory-stop-re-explaining-code-to-copilot/</guid><description>Context rot gerçek — AI agent'iniz 30 turdan sonra yolunu şaşıyor ve her saat compaction vergisi ödüyorsunuz. auto-memory, GitHub Copilot CLI'a binlerce token yakmadan cerrahi düzeyde recall sağlıyor.</description><content:encoded>&lt;p&gt;&lt;em&gt;Bu gönderi otomatik olarak çevrilmiştir. Orijinal sürüm için &lt;a href="https://thedotnetblog.com/tr/news/emiliano-montesdeoca/auto-memory-stop-re-explaining-code-to-copilot/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Copilot oturumunuz &lt;code&gt;/compact&lt;/code&gt;&amp;lsquo;e ulaştığında ve agent yaptığınız işi tamamen unuttuğunda o anı biliyor musunuz? Sonraki beş dakika dosya yapısını, başarısız testi ve daha önce denediğiniz üç yaklaşımı yeniden açıklarsınız. Sonra bu tekrar olur. Ve yine.&lt;/p&gt;
&lt;p&gt;Desi Villanueva bunu ölçtü: &lt;strong&gt;günde 68 dakika&lt;/strong&gt; — yalnızca yeniden yönlendirme için. Kod yazmak için değil. PR incelemek için değil. Sadece AI&amp;rsquo;ı zaten bildiği şeylerle yeniden hizalamak için.&lt;/p&gt;
&lt;p&gt;Bunun neden olduğunu ve bunun için somut bir çözüm bulunduğunu ortaya koyuyor.&lt;/p&gt;
&lt;h2 id="bağlam-penceresinin-yalanı"&gt;Bağlam Penceresinin Yalanı&lt;/h2&gt;
&lt;p&gt;Agent&amp;rsquo;iniz kutuda büyük bir sayı ile geliyor. 200K token. Kulağa devasa geliyor. Pratikte bu bir tavan, garanti değil.&lt;/p&gt;
&lt;p&gt;İşte gerçek matematik:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Toplam 200K context&lt;/li&gt;
&lt;li&gt;Başlangıçta yüklenen MCP araçları için yaklaşık 65K eksik (~33%)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; veya &lt;code&gt;copilot-instructions.md&lt;/code&gt; gibi instruction dosyaları için yaklaşık 10K eksik&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Böylece size yaklaşık &lt;strong&gt;125K kalıyor, daha ilk kelimeyi yazmadan önce&lt;/strong&gt;. Ve durum daha da kötü — LLM&amp;rsquo;ler context doldukça düzgün şekilde degrade olmaz. Yaklaşık %60 kapasitede duvara çarparlar. Model, 30 tur önce söylenen şeyleri kaybetmeye başlar, önceki cevaplarla çelişir ve 10 dakika önce güvenle söylediği dosya adlarını halüsinasyon olarak üretir. Sektör buna &amp;ldquo;lost in the middle&amp;rdquo; problemi diyor.&lt;/p&gt;
&lt;p&gt;Etkin sınır: kalite düşmeye başlamadan önce &lt;strong&gt;45K token&lt;/strong&gt;. Bu da muhtemelen agent&amp;rsquo;in kaymaya başlamasından önce sadece 20-30 aktif konuşma turu demek. Bu yüzden &lt;code&gt;/compact&lt;/code&gt;&amp;lsquo;e her 45 dakikada bir gidiyorsunuz — 200K token doldurduğunuz için değil, model 120K&amp;rsquo;de zaten bozulmaya başladığı için.&lt;/p&gt;
&lt;h2 id="compaction-vergisi"&gt;Compaction Vergisi&lt;/h2&gt;
&lt;p&gt;Her &lt;code&gt;/compact&lt;/code&gt; akış durumunuzu alır götürür. Derin bir debug oturumundasınız. Paylaşılan context 30 dakikadır oluşuyor. Agent dosya yapısını, başarısız testi ve hipotezi biliyor. Sonra uyarı geliyor.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Görmezden gelin → agent giderek aptallaşır ve eski state&amp;rsquo;i halüsinasyonla doldurmaya başlar&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compact&lt;/code&gt; çalıştırın → agent&amp;rsquo;a 30 dakikalık bir incelemenin iki paragraflık özeti verilir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her iki durumda da kaybedersiniz. Her iki durumda da projenizi ilk günündeki yeni bir çalışana anlatıyormuşsunuz gibi yeniden anlatırsınız.&lt;/p&gt;
&lt;p&gt;Kötü tarafı? &lt;strong&gt;Memory zaten var&lt;/strong&gt;. Copilot CLI her oturumu &lt;code&gt;~/.copilot/session-store.db&lt;/code&gt; içindeki yerel bir SQLite veritabanına yazar — dokunulan her dosya, her tur, her checkpoint. Hepsi diskte duruyor. Agent sadece okuyamıyor.&lt;/p&gt;
&lt;h2 id="auto-memory-bir-recall-katmanı-memory-sistemi-değil"&gt;auto-memory: bir recall katmanı, memory sistemi değil&lt;/h2&gt;
&lt;p&gt;auto-memory&amp;rsquo;nin arkasındaki ana fikir bu: yeni bir memory sistemi kurmayın — zaten var olanın üstüne yalnızca okunabilir bir query katmanı kurun.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install auto-memory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yaklaşık 1.900 satır Python. Sıfır bağımlılık. 30 saniyede kurulur.&lt;/p&gt;
&lt;p&gt;Context&amp;rsquo;i grep sonuçlarıyla doldurmak yerine, agent&amp;rsquo;e gerçekten önemli olana cerrahi erişim verirsiniz:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;İşlem&lt;/th&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;th&gt;Ne elde edersiniz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;grep -r &amp;quot;auth&amp;quot; src/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~5,000–10,000&lt;/td&gt;
&lt;td&gt;500 sonuç, çoğu alakasız&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find . -name &amp;quot;*.py&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;Tüm Python dosyaları, contextsiz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent yeniden yönlendirme&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;Ona zaten bilmesi gereken şeyi siz anlatırsınız&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;auto-memory files --json --limit 10&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~50&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Dün üzerinde çalıştığınız 10 dosya&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Bu 200x iyileşme demek. Agent arkeolojik kazıyı atlar ve doğrudan önemli olana gider.&lt;/p&gt;
&lt;p&gt;Önerilen akış: context kullanımınız %50-70&amp;rsquo;e yaklaşınca &lt;code&gt;/clear&lt;/code&gt; çalıştırın ve ardından şunu yazın: &amp;ldquo;X konusunu tartıştığımız son oturumları incele&amp;rdquo;. Kör aramalara 12K token harcamak yerine, auto-memory ilgili context&amp;rsquo;i 50 token içinde çeker.&lt;/p&gt;
&lt;h2 id="bu-net-geliştiricileri-için-neden-önemli"&gt;Bu .NET Geliştiricileri İçin Neden Önemli&lt;/h2&gt;
&lt;p&gt;GitHub Copilot CLI&amp;rsquo;ı .NET işleri için kullanıyorsanız — servisler scaffold etmek, EF Core sorgularını debug etmek, Blazor bileşenleri üzerinde yinelemek — context rot problemi size de aynı sertlikle çarpar. Birden fazla proje, paylaşılan kütüphaneler ve derin call chain&amp;rsquo;ler içeren karmaşık çözümler, agent&amp;rsquo;in en hızlı yolunu kaybettiği codebase türüdür.&lt;/p&gt;
&lt;p&gt;Kurulum kılavuzu Copilot CLI&amp;rsquo;ı buna nasıl yönlendireceğinizi anlatıyor. Bu tek seferlik bir kurulum.&lt;/p&gt;
&lt;p&gt;Dürüst olmak gerekirse? Günde 68 dakikayı geri kazanmak küçük bir yaşam kalitesi ayarı değil. Bu haftada neredeyse 6 saat eder.&lt;/p&gt;
&lt;h2 id="kapanış"&gt;Kapanış&lt;/h2&gt;
&lt;p&gt;Context rot gerçek bir mimari kısıt, sonradan patch&amp;rsquo;lenecek bir bug değil. auto-memory, agent&amp;rsquo;inize pahalı ve gürültülü yeniden keşif yerine ucuz ve kesin bir recall mekanizması vererek bunu aşıyor. GitHub Copilot CLI ile ciddi AI destekli geliştirme yapıyorsanız, 30 saniyelik kurulum buna değer.&lt;/p&gt;
&lt;p&gt;Göz atın: &lt;a href="https://github.com/dezgit2025/auto-memory"&gt;GitHub&amp;rsquo;da auto-memory&lt;/a&gt;. Desi Villanueva&amp;rsquo;nın orijinal yazısı: &lt;a href="https://devblogs.microsoft.com/all-things-azure/i-wasted-68-minutes-a-day-re-explaining-my-code-then-i-built-auto-memory/"&gt;I Wasted 68 Minutes a Day Re-Explaining My Code&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>