[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-migrating-documentdb-to-cosmos":3,"mdc--s02jtm-key":35,"related-org-microsoft-migrating-documentdb-to-cosmos":1532,"related-repo-microsoft-migrating-documentdb-to-cosmos":1723},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":33,"mdContent":34},"migrating-documentdb-to-cosmos","migrate DocumentDB to Cosmos DB","Migrates from the deprecated Microsoft.Azure.DocumentDB SDK (V2) to the modern Microsoft.Azure.Cosmos SDK (V3) for Azure Cosmos DB. Use ONLY when Microsoft.Azure.DocumentDB has been flagged as deprecated or obsolete and must be replaced — not for version-bump scenarios where the V2 SDK is still supported.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Azure","azure","tag",{"name":17,"slug":18,"type":15},"Cosmos DB","cosmos-db",{"name":20,"slug":21,"type":15},"Database","database",{"name":23,"slug":24,"type":15},"Migration","migration",7,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fupgrade-agent-plugins","2026-07-03T16:31:21.932144",null,1,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":28},[],"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fupgrade-agent-plugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fupgrade-agent\u002Fextenders\u002Fupgrade-dotnet\u002Fupgrade\u002Fskills\u002Flazy\u002Flibraries\u002Fmigrating-documentdb-to-cosmos","---\r\nname: migrating-documentdb-to-cosmos\r\ndescription: >\r\n  Migrates from the deprecated Microsoft.Azure.DocumentDB SDK (V2)\r\n  to the modern Microsoft.Azure.Cosmos SDK (V3) for Azure Cosmos DB.\r\n  Use ONLY when Microsoft.Azure.DocumentDB has been flagged as\r\n  deprecated or obsolete and must be replaced — not for version-bump\r\n  scenarios where the V2 SDK is still supported.\r\nmetadata:\r\n  discovery: lazy\r\n  traits: .NET|CSharp|VisualBasic|DotNetCore\r\n---\r\n\r\n# DocumentDB to Cosmos SDK Migration\r\n\r\n## Overview\r\n\r\nMigrate from the legacy `Microsoft.Azure.DocumentDB` (V2) SDK to the modern `Microsoft.Azure.Cosmos` (V3) SDK. The V3 SDK introduces a new object model (`CosmosClient` → `Database` → `Container`) and requires explicit partition keys on most operations. All data-plane calls are async-first, and the `Document` base class is replaced by generic types or `dynamic`.\r\n\r\n## Package Reference Changes\r\n\r\n### Old References (Remove)\r\n\r\n```xml\r\n\u003CPackageReference Include=\"Microsoft.Azure.DocumentDB\" Version=\"{any}\" \u002F>\r\n\u003C!-- Or the .NET Core variant -->\r\n\u003CPackageReference Include=\"Microsoft.Azure.DocumentDB.Core\" Version=\"{any}\" \u002F>\r\n```\r\n\r\n### New Reference (Add)\r\n\r\n```xml\r\n\u003CPackageReference Include=\"Microsoft.Azure.Cosmos\" Version=\"{latest-stable}\" \u002F>\r\n```\r\n\r\nUse tools or [NuGet](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FMicrosoft.Azure.Cosmos) to find the latest stable version.\r\n\r\n## Workflow\r\n\r\n```\r\nMigration Progress:\r\n- [ ] Step 1: Detect DocumentDB SDK usage\r\n- [ ] Step 2: Update package references\r\n- [ ] Step 3: Replace client and resource model\r\n- [ ] Step 4: Convert CRUD operations\r\n- [ ] Step 5: Update queries\r\n- [ ] Step 6: Migrate error handling\r\n- [ ] Step 7: Build and verify\r\n```\r\n\r\n### Step 1: Detect DocumentDB SDK Usage\r\n\r\nScan the project for:\r\n- `using Microsoft.Azure.Documents;` and `using Microsoft.Azure.Documents.Client;`\r\n- Types: `DocumentClient`, `Document`, `DocumentCollection`, `ResourceResponse`\r\n- Methods: `CreateDocumentAsync`, `ReadDocumentAsync`, `ReplaceDocumentAsync`, `DeleteDocumentAsync`\r\n- `RequestOptions` and `FeedOptions` usage\r\n\r\n### Step 2: Update Package References\r\n\r\nRemove `Microsoft.Azure.DocumentDB` or `Microsoft.Azure.DocumentDB.Core` from the project file. Add `Microsoft.Azure.Cosmos`.\r\n\r\n### Step 3: Replace Client and Resource Model\r\n\r\n```csharp\r\n\u002F\u002F Old\r\nvar client = new DocumentClient(new Uri(endpoint), authKey);\r\n\r\n\u002F\u002F New\r\nvar client = new CosmosClient(endpoint, authKey);\r\nvar database = client.GetDatabase(databaseName);\r\nvar container = database.GetContainer(containerName);\r\n```\r\n\r\nThe V3 SDK uses a hierarchy: `CosmosClient` → `Database` → `Container`. There is no need to construct URI links manually — use the fluent getter methods instead.\r\n\r\n### Step 4: Convert CRUD Operations\r\n\r\n```csharp\r\n\u002F\u002F Old — Create\r\nResourceResponse\u003CDocument> response = await client.CreateDocumentAsync(\r\n    collectionUri, document, new RequestOptions { PartitionKey = new PartitionKey(pk) });\r\n\r\n\u002F\u002F New — Create\r\nItemResponse\u003CMyItem> response = await container.CreateItemAsync(\r\n    item, new PartitionKey(pk), new ItemRequestOptions());\r\n\r\n\u002F\u002F Old — Read\r\nDocument doc = await client.ReadDocumentAsync\u003CDocument>(\r\n    documentUri, new RequestOptions { PartitionKey = new PartitionKey(pk) });\r\n\r\n\u002F\u002F New — Read\r\nItemResponse\u003CMyItem> response = await container.ReadItemAsync\u003CMyItem>(\r\n    id, new PartitionKey(pk));\r\n\r\n\u002F\u002F Old — Delete\r\nawait client.DeleteDocumentAsync(documentUri,\r\n    new RequestOptions { PartitionKey = new PartitionKey(pk) });\r\n\r\n\u002F\u002F New — Delete\r\nawait container.DeleteItemAsync\u003CMyItem>(id, new PartitionKey(pk));\r\n```\r\n\r\n### Step 5: Update Queries\r\n\r\n```csharp\r\n\u002F\u002F Old\r\nvar query = client.CreateDocumentQuery\u003CMyItem>(collectionUri,\r\n    new SqlQuerySpec(\"SELECT * FROM c WHERE c.status = @status\",\r\n        new SqlParameterCollection { new SqlParameter(\"@status\", \"active\") }),\r\n    new FeedOptions { EnableCrossPartitionQuery = true });\r\n\r\n\u002F\u002F New\r\nvar query = container.GetItemQueryIterator\u003CMyItem>(\r\n    new QueryDefinition(\"SELECT * FROM c WHERE c.status = @status\")\r\n        .WithParameter(\"@status\", \"active\"));\r\n\r\nvar results = new List\u003CMyItem>();\r\nwhile (query.HasMoreResults)\r\n{\r\n    FeedResponse\u003CMyItem> page = await query.ReadNextAsync();\r\n    results.AddRange(page);\r\n}\r\n```\r\n\r\nCross-partition queries are enabled by default in V3 — remove `EnableCrossPartitionQuery` settings.\r\n\r\n### Step 6: Migrate Error Handling\r\n\r\n```csharp\r\n\u002F\u002F Old\r\ntry { \u002F* operation *\u002F }\r\ncatch (DocumentClientException ex) when (ex.StatusCode == HttpStatusCode.NotFound)\r\n{ \u002F* handle *\u002F }\r\n\r\n\u002F\u002F New\r\ntry { \u002F* operation *\u002F }\r\ncatch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound)\r\n{ \u002F* handle *\u002F }\r\n```\r\n\r\n### Step 7: Build and Verify\r\n\r\n1. Build the project:\r\n   ```\r\n   dotnet build\r\n   ```\r\n2. Run existing tests against a Cosmos DB emulator or development account\r\n3. Verify partition key values are passed to every CRUD and query operation\r\n\r\n## API Differences\r\n\r\n| DocumentDB V2 (Old) | Cosmos V3 (New) | Notes |\r\n|----------------------|-----------------|-------|\r\n| `DocumentClient` | `CosmosClient` | New connection model with builder options |\r\n| `Database` (V2 resource) | `Database` (V3 proxy) | Obtained via `CosmosClient.GetDatabase()` |\r\n| `DocumentCollection` | `Container` | Obtained via `Database.GetContainer()` |\r\n| `Document` class | Generic `T` or `dynamic` | No base class required for items |\r\n| `CreateDocumentAsync` | `Container.CreateItemAsync\u003CT>` | Partition key is a required parameter |\r\n| `ReadDocumentAsync` | `Container.ReadItemAsync\u003CT>` | Takes id + partition key, not a URI |\r\n| `ReplaceDocumentAsync` | `Container.ReplaceItemAsync\u003CT>` | Takes id + partition key |\r\n| `DeleteDocumentAsync` | `Container.DeleteItemAsync\u003CT>` | Takes id + partition key |\r\n| `CreateDocumentQuery` | `Container.GetItemQueryIterator\u003CT>` | Uses `QueryDefinition` for parameterized queries |\r\n| `RequestOptions` | `ItemRequestOptions` \u002F `QueryRequestOptions` | Split into operation-specific options |\r\n| `FeedOptions` | `QueryRequestOptions` | `EnableCrossPartitionQuery` removed (always on) |\r\n| `DocumentClientException` | `CosmosException` | Unified exception type with `StatusCode` |\r\n| URI-based resource links | Id-based fluent accessors | No manual URI construction needed |\r\n\r\n## Troubleshooting\r\n\r\n### Partition Key Required Errors\r\n\r\nThe V3 SDK requires an explicit `PartitionKey` on most item operations. If the V2 code relied on a default or single-partition collection, add the partition key path to the container configuration and pass it with each call.\r\n\r\n### Missing `Document` Base Class\r\n\r\nV3 does not require items to inherit from `Document`. Replace `Document` with a plain POCO or `dynamic`. If code accesses `Document.Id` or `Document.SelfLink`, map `Id` to a property on the POCO and remove `SelfLink` references (V3 does not use self-links).\r\n\r\n### Query Pagination Changes\r\n\r\nV3 queries return a `FeedIterator` that must be iterated with `HasMoreResults` \u002F `ReadNextAsync`. Replace any synchronous `AsEnumerable()` or `ToList()` calls on the old `IDocumentQuery` with the async iteration pattern.\r\n\r\n### Connection String Format\r\n\r\nV3 accepts either an endpoint+key pair or an `AccountEndpoint=...;AccountKey=...` connection string. If the V2 code parsed connection strings manually, switch to the single-string `CosmosClient(connectionString)` constructor.\r\n",{"data":36,"body":40},{"name":4,"description":6,"metadata":37},{"discovery":38,"traits":39},"lazy",".NET|CSharp|VisualBasic|DotNetCore",{"type":41,"children":42},"root",[43,52,59,120,126,133,172,178,192,208,214,224,230,235,339,345,371,377,446,470,476,669,675,814,827,833,907,913,941,947,1347,1353,1359,1372,1385,1442,1448,1499,1505,1526],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"documentdb-to-cosmos-sdk-migration",[49],{"type":50,"value":51},"text","DocumentDB to Cosmos SDK Migration",{"type":44,"tag":53,"props":54,"children":56},"h2",{"id":55},"overview",[57],{"type":50,"value":58},"Overview",{"type":44,"tag":60,"props":61,"children":62},"p",{},[63,65,72,74,80,82,88,90,95,96,102,104,110,112,118],{"type":50,"value":64},"Migrate from the legacy ",{"type":44,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":50,"value":71},"Microsoft.Azure.DocumentDB",{"type":50,"value":73}," (V2) SDK to the modern ",{"type":44,"tag":66,"props":75,"children":77},{"className":76},[],[78],{"type":50,"value":79},"Microsoft.Azure.Cosmos",{"type":50,"value":81}," (V3) SDK. The V3 SDK introduces a new object model (",{"type":44,"tag":66,"props":83,"children":85},{"className":84},[],[86],{"type":50,"value":87},"CosmosClient",{"type":50,"value":89}," → ",{"type":44,"tag":66,"props":91,"children":93},{"className":92},[],[94],{"type":50,"value":20},{"type":50,"value":89},{"type":44,"tag":66,"props":97,"children":99},{"className":98},[],[100],{"type":50,"value":101},"Container",{"type":50,"value":103},") and requires explicit partition keys on most operations. All data-plane calls are async-first, and the ",{"type":44,"tag":66,"props":105,"children":107},{"className":106},[],[108],{"type":50,"value":109},"Document",{"type":50,"value":111}," base class is replaced by generic types or ",{"type":44,"tag":66,"props":113,"children":115},{"className":114},[],[116],{"type":50,"value":117},"dynamic",{"type":50,"value":119},".",{"type":44,"tag":53,"props":121,"children":123},{"id":122},"package-reference-changes",[124],{"type":50,"value":125},"Package Reference Changes",{"type":44,"tag":127,"props":128,"children":130},"h3",{"id":129},"old-references-remove",[131],{"type":50,"value":132},"Old References (Remove)",{"type":44,"tag":134,"props":135,"children":140},"pre",{"className":136,"code":137,"language":138,"meta":139,"style":139},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CPackageReference Include=\"Microsoft.Azure.DocumentDB\" Version=\"{any}\" \u002F>\n\u003C!-- Or the .NET Core variant -->\n\u003CPackageReference Include=\"Microsoft.Azure.DocumentDB.Core\" Version=\"{any}\" \u002F>\n","xml","",[141],{"type":44,"tag":66,"props":142,"children":143},{"__ignoreMap":139},[144,154,163],{"type":44,"tag":145,"props":146,"children":148},"span",{"class":147,"line":29},"line",[149],{"type":44,"tag":145,"props":150,"children":151},{},[152],{"type":50,"value":153},"\u003CPackageReference Include=\"Microsoft.Azure.DocumentDB\" Version=\"{any}\" \u002F>\n",{"type":44,"tag":145,"props":155,"children":157},{"class":147,"line":156},2,[158],{"type":44,"tag":145,"props":159,"children":160},{},[161],{"type":50,"value":162},"\u003C!-- Or the .NET Core variant -->\n",{"type":44,"tag":145,"props":164,"children":166},{"class":147,"line":165},3,[167],{"type":44,"tag":145,"props":168,"children":169},{},[170],{"type":50,"value":171},"\u003CPackageReference Include=\"Microsoft.Azure.DocumentDB.Core\" Version=\"{any}\" \u002F>\n",{"type":44,"tag":127,"props":173,"children":175},{"id":174},"new-reference-add",[176],{"type":50,"value":177},"New Reference (Add)",{"type":44,"tag":134,"props":179,"children":181},{"className":136,"code":180,"language":138,"meta":139,"style":139},"\u003CPackageReference Include=\"Microsoft.Azure.Cosmos\" Version=\"{latest-stable}\" \u002F>\n",[182],{"type":44,"tag":66,"props":183,"children":184},{"__ignoreMap":139},[185],{"type":44,"tag":145,"props":186,"children":187},{"class":147,"line":29},[188],{"type":44,"tag":145,"props":189,"children":190},{},[191],{"type":50,"value":180},{"type":44,"tag":60,"props":193,"children":194},{},[195,197,206],{"type":50,"value":196},"Use tools or ",{"type":44,"tag":198,"props":199,"children":203},"a",{"href":200,"rel":201},"https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FMicrosoft.Azure.Cosmos",[202],"nofollow",[204],{"type":50,"value":205},"NuGet",{"type":50,"value":207}," to find the latest stable version.",{"type":44,"tag":53,"props":209,"children":211},{"id":210},"workflow",[212],{"type":50,"value":213},"Workflow",{"type":44,"tag":134,"props":215,"children":219},{"className":216,"code":218,"language":50},[217],"language-text","Migration Progress:\n- [ ] Step 1: Detect DocumentDB SDK usage\n- [ ] Step 2: Update package references\n- [ ] Step 3: Replace client and resource model\n- [ ] Step 4: Convert CRUD operations\n- [ ] Step 5: Update queries\n- [ ] Step 6: Migrate error handling\n- [ ] Step 7: Build and verify\n",[220],{"type":44,"tag":66,"props":221,"children":222},{"__ignoreMap":139},[223],{"type":50,"value":218},{"type":44,"tag":127,"props":225,"children":227},{"id":226},"step-1-detect-documentdb-sdk-usage",[228],{"type":50,"value":229},"Step 1: Detect DocumentDB SDK Usage",{"type":44,"tag":60,"props":231,"children":232},{},[233],{"type":50,"value":234},"Scan the project for:",{"type":44,"tag":236,"props":237,"children":238},"ul",{},[239,257,289,321],{"type":44,"tag":240,"props":241,"children":242},"li",{},[243,249,251],{"type":44,"tag":66,"props":244,"children":246},{"className":245},[],[247],{"type":50,"value":248},"using Microsoft.Azure.Documents;",{"type":50,"value":250}," and ",{"type":44,"tag":66,"props":252,"children":254},{"className":253},[],[255],{"type":50,"value":256},"using Microsoft.Azure.Documents.Client;",{"type":44,"tag":240,"props":258,"children":259},{},[260,262,268,270,275,276,282,283],{"type":50,"value":261},"Types: ",{"type":44,"tag":66,"props":263,"children":265},{"className":264},[],[266],{"type":50,"value":267},"DocumentClient",{"type":50,"value":269},", ",{"type":44,"tag":66,"props":271,"children":273},{"className":272},[],[274],{"type":50,"value":109},{"type":50,"value":269},{"type":44,"tag":66,"props":277,"children":279},{"className":278},[],[280],{"type":50,"value":281},"DocumentCollection",{"type":50,"value":269},{"type":44,"tag":66,"props":284,"children":286},{"className":285},[],[287],{"type":50,"value":288},"ResourceResponse",{"type":44,"tag":240,"props":290,"children":291},{},[292,294,300,301,307,308,314,315],{"type":50,"value":293},"Methods: ",{"type":44,"tag":66,"props":295,"children":297},{"className":296},[],[298],{"type":50,"value":299},"CreateDocumentAsync",{"type":50,"value":269},{"type":44,"tag":66,"props":302,"children":304},{"className":303},[],[305],{"type":50,"value":306},"ReadDocumentAsync",{"type":50,"value":269},{"type":44,"tag":66,"props":309,"children":311},{"className":310},[],[312],{"type":50,"value":313},"ReplaceDocumentAsync",{"type":50,"value":269},{"type":44,"tag":66,"props":316,"children":318},{"className":317},[],[319],{"type":50,"value":320},"DeleteDocumentAsync",{"type":44,"tag":240,"props":322,"children":323},{},[324,330,331,337],{"type":44,"tag":66,"props":325,"children":327},{"className":326},[],[328],{"type":50,"value":329},"RequestOptions",{"type":50,"value":250},{"type":44,"tag":66,"props":332,"children":334},{"className":333},[],[335],{"type":50,"value":336},"FeedOptions",{"type":50,"value":338}," usage",{"type":44,"tag":127,"props":340,"children":342},{"id":341},"step-2-update-package-references",[343],{"type":50,"value":344},"Step 2: Update Package References",{"type":44,"tag":60,"props":346,"children":347},{},[348,350,355,357,363,365,370],{"type":50,"value":349},"Remove ",{"type":44,"tag":66,"props":351,"children":353},{"className":352},[],[354],{"type":50,"value":71},{"type":50,"value":356}," or ",{"type":44,"tag":66,"props":358,"children":360},{"className":359},[],[361],{"type":50,"value":362},"Microsoft.Azure.DocumentDB.Core",{"type":50,"value":364}," from the project file. Add ",{"type":44,"tag":66,"props":366,"children":368},{"className":367},[],[369],{"type":50,"value":79},{"type":50,"value":119},{"type":44,"tag":127,"props":372,"children":374},{"id":373},"step-3-replace-client-and-resource-model",[375],{"type":50,"value":376},"Step 3: Replace Client and Resource Model",{"type":44,"tag":134,"props":378,"children":382},{"className":379,"code":380,"language":381,"meta":139,"style":139},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Old\nvar client = new DocumentClient(new Uri(endpoint), authKey);\n\n\u002F\u002F New\nvar client = new CosmosClient(endpoint, authKey);\nvar database = client.GetDatabase(databaseName);\nvar container = database.GetContainer(containerName);\n","csharp",[383],{"type":44,"tag":66,"props":384,"children":385},{"__ignoreMap":139},[386,394,402,411,420,429,438],{"type":44,"tag":145,"props":387,"children":388},{"class":147,"line":29},[389],{"type":44,"tag":145,"props":390,"children":391},{},[392],{"type":50,"value":393},"\u002F\u002F Old\n",{"type":44,"tag":145,"props":395,"children":396},{"class":147,"line":156},[397],{"type":44,"tag":145,"props":398,"children":399},{},[400],{"type":50,"value":401},"var client = new DocumentClient(new Uri(endpoint), authKey);\n",{"type":44,"tag":145,"props":403,"children":404},{"class":147,"line":165},[405],{"type":44,"tag":145,"props":406,"children":408},{"emptyLinePlaceholder":407},true,[409],{"type":50,"value":410},"\n",{"type":44,"tag":145,"props":412,"children":414},{"class":147,"line":413},4,[415],{"type":44,"tag":145,"props":416,"children":417},{},[418],{"type":50,"value":419},"\u002F\u002F New\n",{"type":44,"tag":145,"props":421,"children":423},{"class":147,"line":422},5,[424],{"type":44,"tag":145,"props":425,"children":426},{},[427],{"type":50,"value":428},"var client = new CosmosClient(endpoint, authKey);\n",{"type":44,"tag":145,"props":430,"children":432},{"class":147,"line":431},6,[433],{"type":44,"tag":145,"props":434,"children":435},{},[436],{"type":50,"value":437},"var database = client.GetDatabase(databaseName);\n",{"type":44,"tag":145,"props":439,"children":440},{"class":147,"line":25},[441],{"type":44,"tag":145,"props":442,"children":443},{},[444],{"type":50,"value":445},"var container = database.GetContainer(containerName);\n",{"type":44,"tag":60,"props":447,"children":448},{},[449,451,456,457,462,463,468],{"type":50,"value":450},"The V3 SDK uses a hierarchy: ",{"type":44,"tag":66,"props":452,"children":454},{"className":453},[],[455],{"type":50,"value":87},{"type":50,"value":89},{"type":44,"tag":66,"props":458,"children":460},{"className":459},[],[461],{"type":50,"value":20},{"type":50,"value":89},{"type":44,"tag":66,"props":464,"children":466},{"className":465},[],[467],{"type":50,"value":101},{"type":50,"value":469},". There is no need to construct URI links manually — use the fluent getter methods instead.",{"type":44,"tag":127,"props":471,"children":473},{"id":472},"step-4-convert-crud-operations",[474],{"type":50,"value":475},"Step 4: Convert CRUD Operations",{"type":44,"tag":134,"props":477,"children":479},{"className":379,"code":478,"language":381,"meta":139,"style":139},"\u002F\u002F Old — Create\nResourceResponse\u003CDocument> response = await client.CreateDocumentAsync(\n    collectionUri, document, new RequestOptions { PartitionKey = new PartitionKey(pk) });\n\n\u002F\u002F New — Create\nItemResponse\u003CMyItem> response = await container.CreateItemAsync(\n    item, new PartitionKey(pk), new ItemRequestOptions());\n\n\u002F\u002F Old — Read\nDocument doc = await client.ReadDocumentAsync\u003CDocument>(\n    documentUri, new RequestOptions { PartitionKey = new PartitionKey(pk) });\n\n\u002F\u002F New — Read\nItemResponse\u003CMyItem> response = await container.ReadItemAsync\u003CMyItem>(\n    id, new PartitionKey(pk));\n\n\u002F\u002F Old — Delete\nawait client.DeleteDocumentAsync(documentUri,\n    new RequestOptions { PartitionKey = new PartitionKey(pk) });\n\n\u002F\u002F New — Delete\nawait container.DeleteItemAsync\u003CMyItem>(id, new PartitionKey(pk));\n",[480],{"type":44,"tag":66,"props":481,"children":482},{"__ignoreMap":139},[483,491,499,507,514,522,530,538,546,555,564,573,581,590,599,608,616,625,634,643,651,660],{"type":44,"tag":145,"props":484,"children":485},{"class":147,"line":29},[486],{"type":44,"tag":145,"props":487,"children":488},{},[489],{"type":50,"value":490},"\u002F\u002F Old — Create\n",{"type":44,"tag":145,"props":492,"children":493},{"class":147,"line":156},[494],{"type":44,"tag":145,"props":495,"children":496},{},[497],{"type":50,"value":498},"ResourceResponse\u003CDocument> response = await client.CreateDocumentAsync(\n",{"type":44,"tag":145,"props":500,"children":501},{"class":147,"line":165},[502],{"type":44,"tag":145,"props":503,"children":504},{},[505],{"type":50,"value":506},"    collectionUri, document, new RequestOptions { PartitionKey = new PartitionKey(pk) });\n",{"type":44,"tag":145,"props":508,"children":509},{"class":147,"line":413},[510],{"type":44,"tag":145,"props":511,"children":512},{"emptyLinePlaceholder":407},[513],{"type":50,"value":410},{"type":44,"tag":145,"props":515,"children":516},{"class":147,"line":422},[517],{"type":44,"tag":145,"props":518,"children":519},{},[520],{"type":50,"value":521},"\u002F\u002F New — Create\n",{"type":44,"tag":145,"props":523,"children":524},{"class":147,"line":431},[525],{"type":44,"tag":145,"props":526,"children":527},{},[528],{"type":50,"value":529},"ItemResponse\u003CMyItem> response = await container.CreateItemAsync(\n",{"type":44,"tag":145,"props":531,"children":532},{"class":147,"line":25},[533],{"type":44,"tag":145,"props":534,"children":535},{},[536],{"type":50,"value":537},"    item, new PartitionKey(pk), new ItemRequestOptions());\n",{"type":44,"tag":145,"props":539,"children":541},{"class":147,"line":540},8,[542],{"type":44,"tag":145,"props":543,"children":544},{"emptyLinePlaceholder":407},[545],{"type":50,"value":410},{"type":44,"tag":145,"props":547,"children":549},{"class":147,"line":548},9,[550],{"type":44,"tag":145,"props":551,"children":552},{},[553],{"type":50,"value":554},"\u002F\u002F Old — Read\n",{"type":44,"tag":145,"props":556,"children":558},{"class":147,"line":557},10,[559],{"type":44,"tag":145,"props":560,"children":561},{},[562],{"type":50,"value":563},"Document doc = await client.ReadDocumentAsync\u003CDocument>(\n",{"type":44,"tag":145,"props":565,"children":567},{"class":147,"line":566},11,[568],{"type":44,"tag":145,"props":569,"children":570},{},[571],{"type":50,"value":572},"    documentUri, new RequestOptions { PartitionKey = new PartitionKey(pk) });\n",{"type":44,"tag":145,"props":574,"children":576},{"class":147,"line":575},12,[577],{"type":44,"tag":145,"props":578,"children":579},{"emptyLinePlaceholder":407},[580],{"type":50,"value":410},{"type":44,"tag":145,"props":582,"children":584},{"class":147,"line":583},13,[585],{"type":44,"tag":145,"props":586,"children":587},{},[588],{"type":50,"value":589},"\u002F\u002F New — Read\n",{"type":44,"tag":145,"props":591,"children":593},{"class":147,"line":592},14,[594],{"type":44,"tag":145,"props":595,"children":596},{},[597],{"type":50,"value":598},"ItemResponse\u003CMyItem> response = await container.ReadItemAsync\u003CMyItem>(\n",{"type":44,"tag":145,"props":600,"children":602},{"class":147,"line":601},15,[603],{"type":44,"tag":145,"props":604,"children":605},{},[606],{"type":50,"value":607},"    id, new PartitionKey(pk));\n",{"type":44,"tag":145,"props":609,"children":611},{"class":147,"line":610},16,[612],{"type":44,"tag":145,"props":613,"children":614},{"emptyLinePlaceholder":407},[615],{"type":50,"value":410},{"type":44,"tag":145,"props":617,"children":619},{"class":147,"line":618},17,[620],{"type":44,"tag":145,"props":621,"children":622},{},[623],{"type":50,"value":624},"\u002F\u002F Old — Delete\n",{"type":44,"tag":145,"props":626,"children":628},{"class":147,"line":627},18,[629],{"type":44,"tag":145,"props":630,"children":631},{},[632],{"type":50,"value":633},"await client.DeleteDocumentAsync(documentUri,\n",{"type":44,"tag":145,"props":635,"children":637},{"class":147,"line":636},19,[638],{"type":44,"tag":145,"props":639,"children":640},{},[641],{"type":50,"value":642},"    new RequestOptions { PartitionKey = new PartitionKey(pk) });\n",{"type":44,"tag":145,"props":644,"children":646},{"class":147,"line":645},20,[647],{"type":44,"tag":145,"props":648,"children":649},{"emptyLinePlaceholder":407},[650],{"type":50,"value":410},{"type":44,"tag":145,"props":652,"children":654},{"class":147,"line":653},21,[655],{"type":44,"tag":145,"props":656,"children":657},{},[658],{"type":50,"value":659},"\u002F\u002F New — Delete\n",{"type":44,"tag":145,"props":661,"children":663},{"class":147,"line":662},22,[664],{"type":44,"tag":145,"props":665,"children":666},{},[667],{"type":50,"value":668},"await container.DeleteItemAsync\u003CMyItem>(id, new PartitionKey(pk));\n",{"type":44,"tag":127,"props":670,"children":672},{"id":671},"step-5-update-queries",[673],{"type":50,"value":674},"Step 5: Update Queries",{"type":44,"tag":134,"props":676,"children":678},{"className":379,"code":677,"language":381,"meta":139,"style":139},"\u002F\u002F Old\nvar query = client.CreateDocumentQuery\u003CMyItem>(collectionUri,\n    new SqlQuerySpec(\"SELECT * FROM c WHERE c.status = @status\",\n        new SqlParameterCollection { new SqlParameter(\"@status\", \"active\") }),\n    new FeedOptions { EnableCrossPartitionQuery = true });\n\n\u002F\u002F New\nvar query = container.GetItemQueryIterator\u003CMyItem>(\n    new QueryDefinition(\"SELECT * FROM c WHERE c.status = @status\")\n        .WithParameter(\"@status\", \"active\"));\n\nvar results = new List\u003CMyItem>();\nwhile (query.HasMoreResults)\n{\n    FeedResponse\u003CMyItem> page = await query.ReadNextAsync();\n    results.AddRange(page);\n}\n",[679],{"type":44,"tag":66,"props":680,"children":681},{"__ignoreMap":139},[682,689,697,705,713,721,728,735,743,751,759,766,774,782,790,798,806],{"type":44,"tag":145,"props":683,"children":684},{"class":147,"line":29},[685],{"type":44,"tag":145,"props":686,"children":687},{},[688],{"type":50,"value":393},{"type":44,"tag":145,"props":690,"children":691},{"class":147,"line":156},[692],{"type":44,"tag":145,"props":693,"children":694},{},[695],{"type":50,"value":696},"var query = client.CreateDocumentQuery\u003CMyItem>(collectionUri,\n",{"type":44,"tag":145,"props":698,"children":699},{"class":147,"line":165},[700],{"type":44,"tag":145,"props":701,"children":702},{},[703],{"type":50,"value":704},"    new SqlQuerySpec(\"SELECT * FROM c WHERE c.status = @status\",\n",{"type":44,"tag":145,"props":706,"children":707},{"class":147,"line":413},[708],{"type":44,"tag":145,"props":709,"children":710},{},[711],{"type":50,"value":712},"        new SqlParameterCollection { new SqlParameter(\"@status\", \"active\") }),\n",{"type":44,"tag":145,"props":714,"children":715},{"class":147,"line":422},[716],{"type":44,"tag":145,"props":717,"children":718},{},[719],{"type":50,"value":720},"    new FeedOptions { EnableCrossPartitionQuery = true });\n",{"type":44,"tag":145,"props":722,"children":723},{"class":147,"line":431},[724],{"type":44,"tag":145,"props":725,"children":726},{"emptyLinePlaceholder":407},[727],{"type":50,"value":410},{"type":44,"tag":145,"props":729,"children":730},{"class":147,"line":25},[731],{"type":44,"tag":145,"props":732,"children":733},{},[734],{"type":50,"value":419},{"type":44,"tag":145,"props":736,"children":737},{"class":147,"line":540},[738],{"type":44,"tag":145,"props":739,"children":740},{},[741],{"type":50,"value":742},"var query = container.GetItemQueryIterator\u003CMyItem>(\n",{"type":44,"tag":145,"props":744,"children":745},{"class":147,"line":548},[746],{"type":44,"tag":145,"props":747,"children":748},{},[749],{"type":50,"value":750},"    new QueryDefinition(\"SELECT * FROM c WHERE c.status = @status\")\n",{"type":44,"tag":145,"props":752,"children":753},{"class":147,"line":557},[754],{"type":44,"tag":145,"props":755,"children":756},{},[757],{"type":50,"value":758},"        .WithParameter(\"@status\", \"active\"));\n",{"type":44,"tag":145,"props":760,"children":761},{"class":147,"line":566},[762],{"type":44,"tag":145,"props":763,"children":764},{"emptyLinePlaceholder":407},[765],{"type":50,"value":410},{"type":44,"tag":145,"props":767,"children":768},{"class":147,"line":575},[769],{"type":44,"tag":145,"props":770,"children":771},{},[772],{"type":50,"value":773},"var results = new List\u003CMyItem>();\n",{"type":44,"tag":145,"props":775,"children":776},{"class":147,"line":583},[777],{"type":44,"tag":145,"props":778,"children":779},{},[780],{"type":50,"value":781},"while (query.HasMoreResults)\n",{"type":44,"tag":145,"props":783,"children":784},{"class":147,"line":592},[785],{"type":44,"tag":145,"props":786,"children":787},{},[788],{"type":50,"value":789},"{\n",{"type":44,"tag":145,"props":791,"children":792},{"class":147,"line":601},[793],{"type":44,"tag":145,"props":794,"children":795},{},[796],{"type":50,"value":797},"    FeedResponse\u003CMyItem> page = await query.ReadNextAsync();\n",{"type":44,"tag":145,"props":799,"children":800},{"class":147,"line":610},[801],{"type":44,"tag":145,"props":802,"children":803},{},[804],{"type":50,"value":805},"    results.AddRange(page);\n",{"type":44,"tag":145,"props":807,"children":808},{"class":147,"line":618},[809],{"type":44,"tag":145,"props":810,"children":811},{},[812],{"type":50,"value":813},"}\n",{"type":44,"tag":60,"props":815,"children":816},{},[817,819,825],{"type":50,"value":818},"Cross-partition queries are enabled by default in V3 — remove ",{"type":44,"tag":66,"props":820,"children":822},{"className":821},[],[823],{"type":50,"value":824},"EnableCrossPartitionQuery",{"type":50,"value":826}," settings.",{"type":44,"tag":127,"props":828,"children":830},{"id":829},"step-6-migrate-error-handling",[831],{"type":50,"value":832},"Step 6: Migrate Error Handling",{"type":44,"tag":134,"props":834,"children":836},{"className":379,"code":835,"language":381,"meta":139,"style":139},"\u002F\u002F Old\ntry { \u002F* operation *\u002F }\ncatch (DocumentClientException ex) when (ex.StatusCode == HttpStatusCode.NotFound)\n{ \u002F* handle *\u002F }\n\n\u002F\u002F New\ntry { \u002F* operation *\u002F }\ncatch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound)\n{ \u002F* handle *\u002F }\n",[837],{"type":44,"tag":66,"props":838,"children":839},{"__ignoreMap":139},[840,847,855,863,871,878,885,892,900],{"type":44,"tag":145,"props":841,"children":842},{"class":147,"line":29},[843],{"type":44,"tag":145,"props":844,"children":845},{},[846],{"type":50,"value":393},{"type":44,"tag":145,"props":848,"children":849},{"class":147,"line":156},[850],{"type":44,"tag":145,"props":851,"children":852},{},[853],{"type":50,"value":854},"try { \u002F* operation *\u002F }\n",{"type":44,"tag":145,"props":856,"children":857},{"class":147,"line":165},[858],{"type":44,"tag":145,"props":859,"children":860},{},[861],{"type":50,"value":862},"catch (DocumentClientException ex) when (ex.StatusCode == HttpStatusCode.NotFound)\n",{"type":44,"tag":145,"props":864,"children":865},{"class":147,"line":413},[866],{"type":44,"tag":145,"props":867,"children":868},{},[869],{"type":50,"value":870},"{ \u002F* handle *\u002F }\n",{"type":44,"tag":145,"props":872,"children":873},{"class":147,"line":422},[874],{"type":44,"tag":145,"props":875,"children":876},{"emptyLinePlaceholder":407},[877],{"type":50,"value":410},{"type":44,"tag":145,"props":879,"children":880},{"class":147,"line":431},[881],{"type":44,"tag":145,"props":882,"children":883},{},[884],{"type":50,"value":419},{"type":44,"tag":145,"props":886,"children":887},{"class":147,"line":25},[888],{"type":44,"tag":145,"props":889,"children":890},{},[891],{"type":50,"value":854},{"type":44,"tag":145,"props":893,"children":894},{"class":147,"line":540},[895],{"type":44,"tag":145,"props":896,"children":897},{},[898],{"type":50,"value":899},"catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound)\n",{"type":44,"tag":145,"props":901,"children":902},{"class":147,"line":548},[903],{"type":44,"tag":145,"props":904,"children":905},{},[906],{"type":50,"value":870},{"type":44,"tag":127,"props":908,"children":910},{"id":909},"step-7-build-and-verify",[911],{"type":50,"value":912},"Step 7: Build and Verify",{"type":44,"tag":914,"props":915,"children":916},"ol",{},[917,931,936],{"type":44,"tag":240,"props":918,"children":919},{},[920,922],{"type":50,"value":921},"Build the project:\n",{"type":44,"tag":134,"props":923,"children":926},{"className":924,"code":925,"language":50},[217],"dotnet build\n",[927],{"type":44,"tag":66,"props":928,"children":929},{"__ignoreMap":139},[930],{"type":50,"value":925},{"type":44,"tag":240,"props":932,"children":933},{},[934],{"type":50,"value":935},"Run existing tests against a Cosmos DB emulator or development account",{"type":44,"tag":240,"props":937,"children":938},{},[939],{"type":50,"value":940},"Verify partition key values are passed to every CRUD and query operation",{"type":44,"tag":53,"props":942,"children":944},{"id":943},"api-differences",[945],{"type":50,"value":946},"API Differences",{"type":44,"tag":948,"props":949,"children":950},"table",{},[951,975],{"type":44,"tag":952,"props":953,"children":954},"thead",{},[955],{"type":44,"tag":956,"props":957,"children":958},"tr",{},[959,965,970],{"type":44,"tag":960,"props":961,"children":962},"th",{},[963],{"type":50,"value":964},"DocumentDB V2 (Old)",{"type":44,"tag":960,"props":966,"children":967},{},[968],{"type":50,"value":969},"Cosmos V3 (New)",{"type":44,"tag":960,"props":971,"children":972},{},[973],{"type":50,"value":974},"Notes",{"type":44,"tag":976,"props":977,"children":978},"tbody",{},[979,1004,1038,1067,1102,1127,1152,1177,1201,1235,1268,1297,1329],{"type":44,"tag":956,"props":980,"children":981},{},[982,991,999],{"type":44,"tag":983,"props":984,"children":985},"td",{},[986],{"type":44,"tag":66,"props":987,"children":989},{"className":988},[],[990],{"type":50,"value":267},{"type":44,"tag":983,"props":992,"children":993},{},[994],{"type":44,"tag":66,"props":995,"children":997},{"className":996},[],[998],{"type":50,"value":87},{"type":44,"tag":983,"props":1000,"children":1001},{},[1002],{"type":50,"value":1003},"New connection model with builder options",{"type":44,"tag":956,"props":1005,"children":1006},{},[1007,1017,1027],{"type":44,"tag":983,"props":1008,"children":1009},{},[1010,1015],{"type":44,"tag":66,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":50,"value":20},{"type":50,"value":1016}," (V2 resource)",{"type":44,"tag":983,"props":1018,"children":1019},{},[1020,1025],{"type":44,"tag":66,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":50,"value":20},{"type":50,"value":1026}," (V3 proxy)",{"type":44,"tag":983,"props":1028,"children":1029},{},[1030,1032],{"type":50,"value":1031},"Obtained via ",{"type":44,"tag":66,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":50,"value":1037},"CosmosClient.GetDatabase()",{"type":44,"tag":956,"props":1039,"children":1040},{},[1041,1049,1057],{"type":44,"tag":983,"props":1042,"children":1043},{},[1044],{"type":44,"tag":66,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":50,"value":281},{"type":44,"tag":983,"props":1050,"children":1051},{},[1052],{"type":44,"tag":66,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":50,"value":101},{"type":44,"tag":983,"props":1058,"children":1059},{},[1060,1061],{"type":50,"value":1031},{"type":44,"tag":66,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":50,"value":1066},"Database.GetContainer()",{"type":44,"tag":956,"props":1068,"children":1069},{},[1070,1080,1097],{"type":44,"tag":983,"props":1071,"children":1072},{},[1073,1078],{"type":44,"tag":66,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":50,"value":109},{"type":50,"value":1079}," class",{"type":44,"tag":983,"props":1081,"children":1082},{},[1083,1085,1091,1092],{"type":50,"value":1084},"Generic ",{"type":44,"tag":66,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":50,"value":1090},"T",{"type":50,"value":356},{"type":44,"tag":66,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":50,"value":117},{"type":44,"tag":983,"props":1098,"children":1099},{},[1100],{"type":50,"value":1101},"No base class required for items",{"type":44,"tag":956,"props":1103,"children":1104},{},[1105,1113,1122],{"type":44,"tag":983,"props":1106,"children":1107},{},[1108],{"type":44,"tag":66,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":50,"value":299},{"type":44,"tag":983,"props":1114,"children":1115},{},[1116],{"type":44,"tag":66,"props":1117,"children":1119},{"className":1118},[],[1120],{"type":50,"value":1121},"Container.CreateItemAsync\u003CT>",{"type":44,"tag":983,"props":1123,"children":1124},{},[1125],{"type":50,"value":1126},"Partition key is a required parameter",{"type":44,"tag":956,"props":1128,"children":1129},{},[1130,1138,1147],{"type":44,"tag":983,"props":1131,"children":1132},{},[1133],{"type":44,"tag":66,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":50,"value":306},{"type":44,"tag":983,"props":1139,"children":1140},{},[1141],{"type":44,"tag":66,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":50,"value":1146},"Container.ReadItemAsync\u003CT>",{"type":44,"tag":983,"props":1148,"children":1149},{},[1150],{"type":50,"value":1151},"Takes id + partition key, not a URI",{"type":44,"tag":956,"props":1153,"children":1154},{},[1155,1163,1172],{"type":44,"tag":983,"props":1156,"children":1157},{},[1158],{"type":44,"tag":66,"props":1159,"children":1161},{"className":1160},[],[1162],{"type":50,"value":313},{"type":44,"tag":983,"props":1164,"children":1165},{},[1166],{"type":44,"tag":66,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":50,"value":1171},"Container.ReplaceItemAsync\u003CT>",{"type":44,"tag":983,"props":1173,"children":1174},{},[1175],{"type":50,"value":1176},"Takes id + partition key",{"type":44,"tag":956,"props":1178,"children":1179},{},[1180,1188,1197],{"type":44,"tag":983,"props":1181,"children":1182},{},[1183],{"type":44,"tag":66,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":50,"value":320},{"type":44,"tag":983,"props":1189,"children":1190},{},[1191],{"type":44,"tag":66,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":50,"value":1196},"Container.DeleteItemAsync\u003CT>",{"type":44,"tag":983,"props":1198,"children":1199},{},[1200],{"type":50,"value":1176},{"type":44,"tag":956,"props":1202,"children":1203},{},[1204,1213,1222],{"type":44,"tag":983,"props":1205,"children":1206},{},[1207],{"type":44,"tag":66,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":50,"value":1212},"CreateDocumentQuery",{"type":44,"tag":983,"props":1214,"children":1215},{},[1216],{"type":44,"tag":66,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":50,"value":1221},"Container.GetItemQueryIterator\u003CT>",{"type":44,"tag":983,"props":1223,"children":1224},{},[1225,1227,1233],{"type":50,"value":1226},"Uses ",{"type":44,"tag":66,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":50,"value":1232},"QueryDefinition",{"type":50,"value":1234}," for parameterized queries",{"type":44,"tag":956,"props":1236,"children":1237},{},[1238,1246,1263],{"type":44,"tag":983,"props":1239,"children":1240},{},[1241],{"type":44,"tag":66,"props":1242,"children":1244},{"className":1243},[],[1245],{"type":50,"value":329},{"type":44,"tag":983,"props":1247,"children":1248},{},[1249,1255,1257],{"type":44,"tag":66,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":50,"value":1254},"ItemRequestOptions",{"type":50,"value":1256}," \u002F ",{"type":44,"tag":66,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":50,"value":1262},"QueryRequestOptions",{"type":44,"tag":983,"props":1264,"children":1265},{},[1266],{"type":50,"value":1267},"Split into operation-specific options",{"type":44,"tag":956,"props":1269,"children":1270},{},[1271,1279,1287],{"type":44,"tag":983,"props":1272,"children":1273},{},[1274],{"type":44,"tag":66,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":50,"value":336},{"type":44,"tag":983,"props":1280,"children":1281},{},[1282],{"type":44,"tag":66,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":50,"value":1262},{"type":44,"tag":983,"props":1288,"children":1289},{},[1290,1295],{"type":44,"tag":66,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":50,"value":824},{"type":50,"value":1296}," removed (always on)",{"type":44,"tag":956,"props":1298,"children":1299},{},[1300,1309,1318],{"type":44,"tag":983,"props":1301,"children":1302},{},[1303],{"type":44,"tag":66,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":50,"value":1308},"DocumentClientException",{"type":44,"tag":983,"props":1310,"children":1311},{},[1312],{"type":44,"tag":66,"props":1313,"children":1315},{"className":1314},[],[1316],{"type":50,"value":1317},"CosmosException",{"type":44,"tag":983,"props":1319,"children":1320},{},[1321,1323],{"type":50,"value":1322},"Unified exception type with ",{"type":44,"tag":66,"props":1324,"children":1326},{"className":1325},[],[1327],{"type":50,"value":1328},"StatusCode",{"type":44,"tag":956,"props":1330,"children":1331},{},[1332,1337,1342],{"type":44,"tag":983,"props":1333,"children":1334},{},[1335],{"type":50,"value":1336},"URI-based resource links",{"type":44,"tag":983,"props":1338,"children":1339},{},[1340],{"type":50,"value":1341},"Id-based fluent accessors",{"type":44,"tag":983,"props":1343,"children":1344},{},[1345],{"type":50,"value":1346},"No manual URI construction needed",{"type":44,"tag":53,"props":1348,"children":1350},{"id":1349},"troubleshooting",[1351],{"type":50,"value":1352},"Troubleshooting",{"type":44,"tag":127,"props":1354,"children":1356},{"id":1355},"partition-key-required-errors",[1357],{"type":50,"value":1358},"Partition Key Required Errors",{"type":44,"tag":60,"props":1360,"children":1361},{},[1362,1364,1370],{"type":50,"value":1363},"The V3 SDK requires an explicit ",{"type":44,"tag":66,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":50,"value":1369},"PartitionKey",{"type":50,"value":1371}," on most item operations. If the V2 code relied on a default or single-partition collection, add the partition key path to the container configuration and pass it with each call.",{"type":44,"tag":127,"props":1373,"children":1375},{"id":1374},"missing-document-base-class",[1376,1378,1383],{"type":50,"value":1377},"Missing ",{"type":44,"tag":66,"props":1379,"children":1381},{"className":1380},[],[1382],{"type":50,"value":109},{"type":50,"value":1384}," Base Class",{"type":44,"tag":60,"props":1386,"children":1387},{},[1388,1390,1395,1397,1402,1404,1409,1411,1417,1418,1424,1426,1432,1434,1440],{"type":50,"value":1389},"V3 does not require items to inherit from ",{"type":44,"tag":66,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":50,"value":109},{"type":50,"value":1396},". Replace ",{"type":44,"tag":66,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":50,"value":109},{"type":50,"value":1403}," with a plain POCO or ",{"type":44,"tag":66,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":50,"value":117},{"type":50,"value":1410},". If code accesses ",{"type":44,"tag":66,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":50,"value":1416},"Document.Id",{"type":50,"value":356},{"type":44,"tag":66,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":50,"value":1423},"Document.SelfLink",{"type":50,"value":1425},", map ",{"type":44,"tag":66,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":50,"value":1431},"Id",{"type":50,"value":1433}," to a property on the POCO and remove ",{"type":44,"tag":66,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":50,"value":1439},"SelfLink",{"type":50,"value":1441}," references (V3 does not use self-links).",{"type":44,"tag":127,"props":1443,"children":1445},{"id":1444},"query-pagination-changes",[1446],{"type":50,"value":1447},"Query Pagination Changes",{"type":44,"tag":60,"props":1449,"children":1450},{},[1451,1453,1459,1461,1467,1468,1474,1476,1482,1483,1489,1491,1497],{"type":50,"value":1452},"V3 queries return a ",{"type":44,"tag":66,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":50,"value":1458},"FeedIterator",{"type":50,"value":1460}," that must be iterated with ",{"type":44,"tag":66,"props":1462,"children":1464},{"className":1463},[],[1465],{"type":50,"value":1466},"HasMoreResults",{"type":50,"value":1256},{"type":44,"tag":66,"props":1469,"children":1471},{"className":1470},[],[1472],{"type":50,"value":1473},"ReadNextAsync",{"type":50,"value":1475},". Replace any synchronous ",{"type":44,"tag":66,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":50,"value":1481},"AsEnumerable()",{"type":50,"value":356},{"type":44,"tag":66,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":50,"value":1488},"ToList()",{"type":50,"value":1490}," calls on the old ",{"type":44,"tag":66,"props":1492,"children":1494},{"className":1493},[],[1495],{"type":50,"value":1496},"IDocumentQuery",{"type":50,"value":1498}," with the async iteration pattern.",{"type":44,"tag":127,"props":1500,"children":1502},{"id":1501},"connection-string-format",[1503],{"type":50,"value":1504},"Connection String Format",{"type":44,"tag":60,"props":1506,"children":1507},{},[1508,1510,1516,1518,1524],{"type":50,"value":1509},"V3 accepts either an endpoint+key pair or an ",{"type":44,"tag":66,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":50,"value":1515},"AccountEndpoint=...;AccountKey=...",{"type":50,"value":1517}," connection string. If the V2 code parsed connection strings manually, switch to the single-string ",{"type":44,"tag":66,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":50,"value":1523},"CosmosClient(connectionString)",{"type":50,"value":1525}," constructor.",{"type":44,"tag":1527,"props":1528,"children":1529},"style",{},[1530],{"type":50,"value":1531},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1533,"total":1722},[1534,1556,1575,1596,1611,1628,1639,1652,1667,1682,1697,1710],{"slug":1535,"name":1535,"fn":1536,"description":1537,"org":1538,"tags":1539,"stars":1553,"repoUrl":1554,"updatedAt":1555},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1540,1543,1546,1547,1550],{"name":1541,"slug":1542,"type":15},"Engineering","engineering",{"name":1544,"slug":1545,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1548,"slug":1549,"type":15},"Project Management","project-management",{"name":1551,"slug":1552,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1557,"name":1557,"fn":1558,"description":1559,"org":1560,"tags":1561,"stars":1572,"repoUrl":1573,"updatedAt":1574},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1562,1565,1568,1569],{"name":1563,"slug":1564,"type":15},".NET","net",{"name":1566,"slug":1567,"type":15},"Agents","agents",{"name":13,"slug":14,"type":15},{"name":1570,"slug":1571,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1576,"name":1576,"fn":1577,"description":1578,"org":1579,"tags":1580,"stars":1572,"repoUrl":1573,"updatedAt":1595},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1581,1584,1585,1588,1591,1592],{"name":1582,"slug":1583,"type":15},"Analytics","analytics",{"name":13,"slug":14,"type":15},{"name":1586,"slug":1587,"type":15},"Data Analysis","data-analysis",{"name":1589,"slug":1590,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1593,"slug":1594,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1597,"name":1597,"fn":1598,"description":1599,"org":1600,"tags":1601,"stars":1572,"repoUrl":1573,"updatedAt":1610},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1602,1605,1606,1607],{"name":1603,"slug":1604,"type":15},"AI Infrastructure","ai-infrastructure",{"name":13,"slug":14,"type":15},{"name":1589,"slug":1590,"type":15},{"name":1608,"slug":1609,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1612,"name":1612,"fn":1613,"description":1614,"org":1615,"tags":1616,"stars":1572,"repoUrl":1573,"updatedAt":1627},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1617,1618,1621,1622,1623,1626],{"name":13,"slug":14,"type":15},{"name":1619,"slug":1620,"type":15},"Compliance","compliance",{"name":1570,"slug":1571,"type":15},{"name":9,"slug":8,"type":15},{"name":1624,"slug":1625,"type":15},"Python","python",{"name":1608,"slug":1609,"type":15},"2026-07-18T05:14:23.017504",{"slug":1629,"name":1629,"fn":1630,"description":1631,"org":1632,"tags":1633,"stars":1572,"repoUrl":1573,"updatedAt":1638},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1634,1635,1636,1637],{"name":1582,"slug":1583,"type":15},{"name":13,"slug":14,"type":15},{"name":1570,"slug":1571,"type":15},{"name":1624,"slug":1625,"type":15},"2026-07-31T05:54:29.068751",{"slug":1640,"name":1640,"fn":1641,"description":1642,"org":1643,"tags":1644,"stars":1572,"repoUrl":1573,"updatedAt":1651},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1645,1648,1649,1650],{"name":1646,"slug":1647,"type":15},"API Development","api-development",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":1624,"slug":1625,"type":15},"2026-07-18T05:14:16.988376",{"slug":1653,"name":1653,"fn":1654,"description":1655,"org":1656,"tags":1657,"stars":1572,"repoUrl":1573,"updatedAt":1666},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1658,1659,1662,1665],{"name":13,"slug":14,"type":15},{"name":1660,"slug":1661,"type":15},"Computer Vision","computer-vision",{"name":1663,"slug":1664,"type":15},"Images","images",{"name":1624,"slug":1625,"type":15},"2026-07-18T05:14:18.007737",{"slug":1668,"name":1668,"fn":1669,"description":1670,"org":1671,"tags":1672,"stars":1572,"repoUrl":1573,"updatedAt":1681},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1673,1674,1677,1680],{"name":13,"slug":14,"type":15},{"name":1675,"slug":1676,"type":15},"Configuration","configuration",{"name":1678,"slug":1679,"type":15},"Feature Flags","feature-flags",{"name":1589,"slug":1590,"type":15},"2026-07-03T16:32:01.278468",{"slug":1683,"name":1683,"fn":1684,"description":1685,"org":1686,"tags":1687,"stars":1572,"repoUrl":1573,"updatedAt":1696},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1688,1689,1690,1693],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":1691,"slug":1692,"type":15},"NoSQL","nosql",{"name":1694,"slug":1695,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1698,"name":1698,"fn":1684,"description":1699,"org":1700,"tags":1701,"stars":1572,"repoUrl":1573,"updatedAt":1709},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1702,1703,1704,1705,1706],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":1691,"slug":1692,"type":15},{"name":1707,"slug":1708,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1711,"name":1711,"fn":1712,"description":1713,"org":1714,"tags":1715,"stars":1572,"repoUrl":1573,"updatedAt":1721},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1716,1717,1718,1719,1720],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":1589,"slug":1590,"type":15},{"name":1691,"slug":1692,"type":15},"2026-05-13T06:14:17.582229",267,{"items":1724,"total":636},[1725,1735,1749,1766,1776,1791,1798],{"slug":1726,"name":1726,"fn":1727,"description":1728,"org":1729,"tags":1730,"stars":25,"repoUrl":26,"updatedAt":1734},"converting-to-cpm","migrate .NET projects to Central Package Management","Converts .NET projects and solutions to NuGet Central Package Management (CPM) with Directory.Packages.props. Use when the user wants to centralize, convert, align, or sync NuGet package versions across multiple projects, resolve version conflicts or mismatches, or get versions consistent across a solution or repository. Also triggers when packages are out of sync or drifting across projects.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1731,1732,1733],{"name":1563,"slug":1564,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},"2026-07-18T05:14:13.971821",{"slug":1736,"name":1736,"fn":1737,"description":1738,"org":1739,"tags":1740,"stars":25,"repoUrl":26,"updatedAt":1748},"creating-winforms-custom-controls","create custom WinForms controls","Creates custom controls and UserControls for modern WinForms (.NET 6+). Use when deriving from Control, UserControl, Button, TextBox, or other base controls, implementing custom rendering with OnPaint overrides, creating composite controls with child control composition, adding custom properties with [Browsable], [Category], or [DefaultValue] attributes for Designer support, implementing INotifyPropertyChanged for control properties, handling Layout\u002FLayoutEngine for custom sizing, creating scrollable controls with AutoScrollMinSize, implementing dark mode theming, or building List\u002FGrid\u002FTree-like controls. Also triggers for \"custom UserControl\", \"derive from Control\", \"owner-drawn control\", \"Designer properties\", \"[Browsable] attribute\", \"custom WinForms control\", \"LayoutEngine\", \"AutoScroll control\", and \"themed control\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1741,1742,1745],{"name":1563,"slug":1564,"type":15},{"name":1743,"slug":1744,"type":15},"Windows","windows",{"name":1746,"slug":1747,"type":15},"WinUI","winui","2026-07-03T16:31:30.1325",{"slug":1750,"name":1750,"fn":1751,"description":1752,"org":1753,"tags":1754,"stars":25,"repoUrl":26,"updatedAt":1765},"managing-winforms-high-dpi-layout","design high-DPI responsive WinForms layouts","Implements WinForms high-DPI fluent layouts using TableLayoutPanel, FlowLayoutPanel, and DPI-aware design patterns. Use when creating responsive form layouts that must scale across different DPI settings, implementing Per Monitor V2 (PerMonitorV2) DPI awareness, working with TableLayoutPanel.RowStyles\u002FColumnStyles, using FlowLayoutPanel for dynamic layouts, replacing fixed pixel positioning with container-based layout, troubleshooting DPI scaling issues, or structuring nested layout containers. Also triggers for \"TableLayoutPanel\", \"FlowLayoutPanel\", \"high DPI WinForms\", \"PerMonitorV2\", \"DPI aware layout\", \"responsive WinForms\", \"scale UI\", \"AutoScaleMode\", and \"DPI scaling\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1755,1758,1761,1764],{"name":1756,"slug":1757,"type":15},"Design","design",{"name":1759,"slug":1760,"type":15},"Desktop","desktop",{"name":1762,"slug":1763,"type":15},"UI Components","ui-components",{"name":1743,"slug":1744,"type":15},"2026-07-18T05:14:12.982806",{"slug":1767,"name":1767,"fn":1768,"description":1769,"org":1770,"tags":1771,"stars":25,"repoUrl":26,"updatedAt":1775},"managing-winforms-mvvm","implement MVVM pattern in WinForms","Implements MVVM pattern in WinForms applications (.NET 8+) with ViewModels, Commands, and DataContext. Use when user explicitly requests MVVM implementation, setting up ViewModel with INotifyPropertyChanged or ObservableObject, implementing ICommand or RelayCommand, wiring Form.DataContext, binding controls to ViewModel properties, creating Commands for button clicks, or separating business logic from UI code. Also triggers for \"WinForms MVVM\", \"ViewModel in WinForms\", \"INotifyPropertyChanged\", \"DataContext binding\", \"Command pattern WinForms\", \"ObservableObject\", \"RelayCommand\", and \"testable WinForms\". Also use when fixing existing MVVM code or when guided by winforms-feature-adoption scenario. DO NOT USE FOR: automatic application during version upgrades (opt-in only).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1772,1773,1774],{"name":1563,"slug":1564,"type":15},{"name":1743,"slug":1744,"type":15},{"name":1746,"slug":1747,"type":15},"2026-07-18T05:14:11.951511",{"slug":1777,"name":1777,"fn":1778,"description":1779,"org":1780,"tags":1781,"stars":25,"repoUrl":26,"updatedAt":1790},"migrating-aspnet-framework-to-core","migrate ASP.NET Framework to Core","Orchestrates migration of ASP.NET Framework (System.Web) MVC and WebAPI projects to ASP.NET Core. Covers only old .NET Framework web projects — not applicable to ASP.NET Core or modern .NET web projects (those are already on the target stack). Defines the ordered phase sequence (project file, host, config, DI, controllers, middleware, auth, views, cleanup), satellite skill dispatch, and migration unit breakdown for both in-place and side-by-side modes. Use when executing a task that upgrades a project with System.Web dependencies, HttpModules, HttpHandlers, MVC controllers, WebAPI controllers, or Global.asax. Also triggers for \"migrate ASP.NET to Core\", \"upgrade MVC project\", \"convert WebAPI to ASP.NET Core\". Not applicable to class libraries unless they directly reference System.Web.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1782,1783,1786,1789],{"name":1563,"slug":1564,"type":15},{"name":1784,"slug":1785,"type":15},"ASP.NET Core","asp-net-core",{"name":1787,"slug":1788,"type":15},"Backend","backend",{"name":23,"slug":24,"type":15},"2026-07-03T16:30:55.581898",{"slug":4,"name":4,"fn":5,"description":6,"org":1792,"tags":1793,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1794,1795,1796,1797],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":23,"slug":24,"type":15},{"slug":1799,"name":1799,"fn":1800,"description":1801,"org":1802,"tags":1803,"stars":25,"repoUrl":26,"updatedAt":1811},"migrating-global-asax","migrate Global.asax to ASP.NET Core middleware","Migrates Global.asax application lifecycle events to ASP.NET Core middleware, startup configuration, and Program.cs. Use when upgrading ASP.NET Framework apps containing Global.asax or Global.asax.cs files. Triggers for \"migrate Global.asax\", \"convert application events\", \"move Application_Start to Program.cs\", \"replace Global.asax with middleware\", and ASP.NET-to-Core migration involving request lifecycle, error handling, or session management.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1804,1806,1807,1808],{"name":1784,"slug":1805,"type":15},"aspnet-core",{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},{"name":1809,"slug":1810,"type":15},"Modernization","modernization","2026-07-07T06:54:34.226435"]