{"id":117,"date":"2014-12-16T19:35:14","date_gmt":"2014-12-16T19:35:13","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-20-development-blog-series\/"},"modified":"2014-12-16T19:35:14","modified_gmt":"2014-12-16T19:35:13","slug":"introducing-couchbase-net-sdk-20-development-blog-series","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-development-blog-series\/","title":{"rendered":"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series"},"content":{"rendered":"<p>Hello folks, over the next couple of months we\u2019ll be doing a series of blogs that will follow the development of the Couchbase .NET 2.0 SDK. In this post I will go over the high level architecture, some motivation and features you should expect, and what the overall goals are of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C. Discussing the goals of the .NET SDK within the scope of the entire suite of Couchbase clients is an important step in unifying the API\u2019s, so that developers have a consistent programming experience no matter which SDK they chose.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">History and Motivation<\/h1>\n\n\n\n<p>First up, let\u2019s talk about what are motivation is for re-writing the Couchbase .NET SDK. Note that for the most part, this is a complete rewrite from scratch\u2026pretty much every component is being redesigned and redeveloped to better suit the needs of our customer and the user community at large. By now, most of us \u00a0have been warned that the <em><a href=\"https:\/\/www.joelonsoftware.com\/articles\/fog0000000069.html\">single worst strategic mistake a software company can do, is rewrite working, functional code from scratch<\/a><\/em><strong>, <\/strong>but we here at Couchbase feel it\u2019s the best decision given the history and state of the .NET 1.X SDK and the direction we want to go with the client.<\/p>\n\n\n\n<p>A little history might be in order here. The current client is based off of the original Memcached .NET client: <a href=\"https:\/\/github.com\/enyim\/EnyimMemcached\">Enyim.Caching<\/a>. It was written several years back and originally supported the Memcached Text protocol and eventually the Memcached Binary Protocol as well. In itself, it was designed to be a stand-alone API, not framework for creating other API\u2019s. That being said, the current .NET Couchbase Client was built on top of a fork of the Enyim.Caching source; we forked because the original author, while a great supporter, no longer had the time needed to keep the project going. The Couchbase client added view support and other Couchbase Server specific features on top of the K\/V stuff already supported by Enyim.Caching.<\/p>\n\n\n\n<p>Since the client was originally based off a K\/V based protocol, fitting in some of the Couchbase features has made for a bit of a thorny API. Furthermore, as more layers have been added the complexity has increased as well making supporting and maintaining the client more and more difficult. Additionally, since the client is really based off of .NET 3.5 (while we do build for 4.0, 3.5 is the LCD), we weren\u2019t progressing with the current state-of-the-art .NET features like the powerful new Task (async\/await) based asynchronous libraries\/features and improvements to the networking API\u2019s. Maintaining backwards compatibility and progressing the client is therefore impossible; we need to take a whole new direction.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Goals and Features<\/h1>\n\n\n\n<p>The goals\/objectives of the Couchbase .NET 2.0 SDK are fairly simple:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unification and consistency of the programming interface across all Couchbase SDK platforms (Java, .NET, PHP, Node, C, etc)<\/li>\n\n\n<li>A flexible, test-driven design \u2013 extensibility at its core<\/li>\n\n\n<li>Highly configurable \u2013 but easy to get up and running with the default configuration<\/li>\n\n\n<li>Asynchronous I\/O \u2013 a non-blocking model for network programming<\/li>\n\n\n<li>A simple and easy to use programming interface<\/li>\n\n\n<li>Minimalistic use of client\/server connections<\/li>\n\n\n<li>Improved documentation<\/li>\n\n<\/ul>\n\n\n\n<p>Some likely features include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Support for Cluster Carrier Configuration Publication (<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/wiki\/display\/couchbase\/Cluster+Configuration+Carrier+Publication\/\">CCCP<\/a>) \u2013 a new way of updating the clients configuration based on the clusters current state via a pull mechanism<\/li>\n\n\n<li>Task-based Asynchronous Pattern (<a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/hh873175%28v=vs.110%29.aspx\">TAP<\/a>) support for K\/V and View operations<\/li>\n\n\n<li>First class <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/communities\/n1ql\/\">N1QL<\/a> support \u2013 N1QL is the awesome new SQL-like query language in Couchbase<\/li>\n\n\n<li>A <a href=\"https:\/\/en.wikipedia.org\/wiki\/Language_Integrated_Query\">LINQ<\/a> provider implementation over the core API<\/li>\n\n\n<li>Integration points with other .NET technologies like ASP.NET and Frameworks for quickly developing data-driven applications<\/li>\n\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">High-Level Architecture<\/h1>\n\n\n\n<p>Over the last couple years, the SDK team at Couchbase have developed several Couchbase Server clients on different platforms and frameworks: .NET, Java, Node.js, etc. As each of these clients have been developed and evolved with changes in the Server, several patterns have emerged for developing a cluster aware client, or more specifically in Couchbase\u2019s case, a \u201csmart\u201d client. In the goal of \u201cunifying the programming interface\u201d, we implement these patterns within each client. We will be discussing those patterns in detail in later posts.<\/p>\n\n\n\n<p><strong>Couchbase Client Components<\/strong><\/p>\n\n\n\n<p>These components make up a Couchbase client:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IO \u2013 Resource management and general network programming access<\/li>\n\n\n<li>Configuration \u2013 Client and Server configuration<\/li>\n\n\n<li>Operations \u2013 Key\/Value and View operations on JSON documents: Get, Set, etc.<\/li>\n\n\n<li>Cluster Map \u2013 Manages active nodes and where keys are stored across the cluster<\/li>\n\n\n<li>Logging and Instrumentation \u2013 General logging, tracing and monitoring of client activity<\/li>\n\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Next Up<\/h1>\n\n\n\n<p>Well, that\u2019s it for now. Next up we will be going over the design and development of one portion of the Configuration component: Server Configuration. The Server Configuration drives the state of the client which parallels the state of the cluster. A change in the cluster generally, means a change in the client state as well, which brings with it various complexity and issues which must be addressed to keep things stable.<\/p>","protected":false},"excerpt":{"rendered":"<p>Hello folks, over the next couple of months we\u2019ll be doing a series of blogs that will follow the development of the Couchbase .NET 2.0 SDK. In this post I will go over the high level architecture, some motivation and features you should expect, and what the overall goals are of the .NET SDK with [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":18,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[33],"tags":[45,68],"ppma_author":[32],"class_list":["post-117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-architecture","tag-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Introduction to the Couchbase .NET SDK 2.0 Development<\/title>\n<meta name=\"description\" content=\"Learn high level architecture and features, overall goals of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-development-blog-series\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series\" \/>\n<meta property=\"og:description\" content=\"Learn high level architecture and features, overall goals of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-development-blog-series\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T19:35:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series\",\"datePublished\":\"2014-12-16T19:35:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/\"},\"wordCount\":847,\"commentCount\":9,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Architecture\",\"Development\"],\"articleSection\":[\".NET\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/\",\"name\":\"Introduction to the Couchbase .NET SDK 2.0 Development\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T19:35:13+00:00\",\"description\":\"Learn high level architecture and features, overall goals of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/introducing-couchbase-net-sdk-20-development-blog-series\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/jeffrysmorris\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pt\\\/author\\\/jeff-morris\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introduction to the Couchbase .NET SDK 2.0 Development","description":"Learn high level architecture and features, overall goals of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-development-blog-series\/","og_locale":"pt_BR","og_type":"article","og_title":"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series","og_description":"Learn high level architecture and features, overall goals of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-development-blog-series\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T19:35:13+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series","datePublished":"2014-12-16T19:35:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/"},"wordCount":847,"commentCount":9,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","keywords":["Architecture","Development"],"articleSection":[".NET"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/","url":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/","name":"Introduction to the Couchbase .NET SDK 2.0 Development","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T19:35:13+00:00","description":"Learn high level architecture and features, overall goals of the .NET SDK with respect to the other Couchbase clients: Node, PHP, Java, and C.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-20-development-blog-series\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing the Couchbase DOTNET SDK 2.0 Development Blog Series"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, Senior Software Engineer, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/jeff-morris\/"}]}},"acf":[],"authors":[{"term_id":32,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=117"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/117\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/18"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=117"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}