{"id":1849,"date":"2014-12-24T00:21:51","date_gmt":"2014-12-24T00:21:51","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1849"},"modified":"2025-06-13T23:49:57","modified_gmt":"2025-06-14T06:49:57","slug":"couchbase-net-sdk-20-ga-available","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-ga-available\/","title":{"rendered":"Couchbase .NET SDK 2.0 GA dispon\u00edvel!"},"content":{"rendered":"<p>Hoje estamos lan\u00e7ando o novo Couchbase .NET SDK para disponibilidade geral! Trata-se de uma reescrita completa do SDK e baseia-se na especifica\u00e7\u00e3o do Couchbase SDK 2.0, o que significa que ele mant\u00e9m uma interface consistente com todos os outros SDKs do Couchbase 2.0 e compartilha transcodifica\u00e7\u00e3o e sinalizadores comuns para interagir com os outros SDKs. Por exemplo, os SDKs .NET e Java podem trabalhar com os mesmos dados no mesmo bucket sem causar problemas de transcodifica\u00e7\u00e3o.<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/couchbase-net-sdk-20-ga-available\/sdk2_0.jpg\" \/><\/p>\n<h2><\/h2>\n<h2>O que h\u00e1 nesta vers\u00e3o?<\/h2>\n<p>Esta vers\u00e3o inclui todos os recursos adicionados no Developer Previews <strong><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-developer-preview-1\/\">1<\/a><\/strong>, <strong>2<\/strong> e <strong><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-developer-preview-3\/\">3<\/a><\/strong> e do Beta <strong><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-beta\/\">1<\/a><\/strong> e <strong><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-beta-2\/\">2<\/a><\/strong>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-beta-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">Exibi\u00e7\u00f5es ass\u00edncronas<\/a><\/li>\n<li>Suporte de visualiza\u00e7\u00e3o para consultas ad hoc N1QL<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-beta-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bandeiras comuns<\/a> - Tipos de dados consistentes em todos os SDKs<\/li>\n<li>Todos os novos <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-developer-preview-3\/\" target=\"_blank\" rel=\"noopener noreferrer\">Documento API<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-beta-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">M\u00e9todos Bulk Insert e Get<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-couchbase-net-sdk-20-beta-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">API de gerenciamento totalmente nova<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-2-0-sdk-developer-preview-2\/\">Suporte para camadas de soquete seguro (SSL\/TLS)<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-development-series-part-1-1-server-configuration\/\" target=\"_blank\" rel=\"noopener noreferrer\">\"Gerenciamento otimizado de conex\u00f5es\"<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-2-0-sdk-developer-preview-2\/\">Autentica\u00e7\u00e3o CRAM-MD5<\/a><\/li>\n<li>E outros...<\/li>\n<\/ul>\n<p>Al\u00e9m de tudo isso, ele adiciona os seguintes recursos:<\/p>\n<ul>\n<li>Suporte \u00e0 leitura de r\u00e9plicas<\/li>\n<li>Suporte para GetL, Unlock e GetWithLock<\/li>\n<li>Sobrecargas para Prepend\/Append que aceitam matrizes de bytes<\/li>\n<li>Aprimoramentos na API de visualiza\u00e7\u00e3o que facilitam a serializa\u00e7\u00e3o de e para POCOs<\/li>\n<\/ul>\n<p>O mais importante \u00e9 que ele inclui uma longa lista de corre\u00e7\u00f5es de bugs e melhorias destinadas a estabilizar o n\u00facleo e prepar\u00e1-lo para o uso em produ\u00e7\u00e3o.<\/p>\n<h3>Leituras de r\u00e9plicas<\/h3>\n<p>As leituras de r\u00e9plicas permitem leituras em uma ou mais r\u00e9plicas se o seu bucket estiver configurado para suportar r\u00e9plicas. Isso \u00e9 \u00fatil para cen\u00e1rios em que o cluster est\u00e1 em um estado insalubre - por exemplo, um n\u00f3 est\u00e1 inoperante e ainda n\u00e3o passou por uma falha.<\/p>\n<div class=\"geshifilter\">\n<div class=\"csharp geshifilter-csharp\" style=\"font-family: monospace\">\n<p><span style=\"color: #0600ff;font-weight: bold\">usando<\/span> <span style=\"color: #008000\">(<\/span>var cluster <span style=\"color: #008000\">=<\/span> <a href=\"https:\/\/www.google.com\/search?q=new+msdn.microsoft.com\"><span style=\"color: #008000\">novo<\/span><\/a> Aglomerado<span style=\"color: #008000\">(<\/span>configura\u00e7\u00e3o<span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">)<\/span><br \/>\n<span style=\"color: #008000\">{<\/span><br \/>\n<span style=\"color: #0600ff;font-weight: bold\">usando<\/span> <span style=\"color: #008000\">(<\/span>var bucket <span style=\"color: #008000\">=<\/span> agrupamento<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">OpenBucket<\/span><span style=\"color: #008000\">(<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">)<\/span><br \/>\n<span style=\"color: #008000\">{<\/span><br \/>\n<span style=\"color: #0600ff;font-weight: bold\">const<\/span> <span style=\"color: #6666cc;font-weight: bold\">string<\/span> chave <span style=\"color: #008000\">=<\/span> <span style=\"color: #666666\">\"ReplicaKey\"<\/span><span style=\"color: #008000\">;<\/span><\/p>\n<p>var result <span style=\"color: #008000\">=<\/span> balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">GetFromReplica<\/span><span style=\"color: #008000\">&lt;<\/span><span style=\"color: #6666cc;font-weight: bold\">string<\/span><span style=\"color: #008000\">&gt;<\/span><span style=\"color: #008000\">(<\/span>chave<span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\nAfirmar<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">IsTrue<\/span><span style=\"color: #008000\">(<\/span>resultado<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Sucesso<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\n<span style=\"color: #008000\">}<\/span><br \/>\n<span style=\"color: #008000\">}<\/span><\/p>\n<\/div>\n<\/div>\n<p>No c\u00f3digo acima, estamos simplesmente substituindo o m\u00e9todo usual Get(key), que recupera a chave diretamente do prim\u00e1rio, pelo m\u00e9todo GetFromReplica(key), que tentar\u00e1 recuperar a chave de uma ou mais r\u00e9plicas. Observe que o Couchbase Server suporta at\u00e9 tr\u00eas r\u00e9plicas e o n\u00famero de n\u00f3s em seu cluster deve corresponder ao n\u00famero de r\u00e9plicas (ou c\u00f3pias) que voc\u00ea deseja armazenar.<\/p>\n<h3>GetL, Unlock e GetWithLock<\/h3>\n<p>GetL \u00e9 o comando do memcached para bloquear uma chave para uso exclusivo. Por padr\u00e3o, o servidor bloquear\u00e1 uma chave por 15 segundos e at\u00e9 um m\u00e1ximo de 30 segundos. No SDK, fornecemos um m\u00e9todo chamado GetWithLock que encapsula esse comportamento. O m\u00e9todo UnLock permite a remo\u00e7\u00e3o expl\u00edcita de um bloqueio em uma chave, antes que a expira\u00e7\u00e3o expire ou quando o servidor desbloqueia a chave depois que a expira\u00e7\u00e3o m\u00e1xima de 30 segundos \u00e9 atingida.<\/p>\n<div class=\"geshifilter\">\n<div class=\"csharp geshifilter-csharp\" style=\"font-family: monospace\">\n<p><span style=\"color: #0600ff;font-weight: bold\">usando<\/span> <span style=\"color: #008000\">(<\/span>var bucket <span style=\"color: #008000\">=<\/span> _cluster<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">OpenBucket<\/span><span style=\"color: #008000\">(<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">)<\/span><br \/>\n<span style=\"color: #008000\">{<\/span><br \/>\nvar chave <span style=\"color: #008000\">=<\/span> <span style=\"color: #666666\">\"When_Key_Is_Locked_Mutate_Succeeds_If_Unlocked\"<\/span><span style=\"color: #008000\">;<\/span><br \/>\nAfirmar<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">IsTrue<\/span><span style=\"color: #008000\">(<\/span>balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Upsert<\/span><span style=\"color: #008000\">(<\/span>chave, <span style=\"color: #666666\">\"{'name':'value'}\"<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Sucesso<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><\/p>\n<p>var getl <span style=\"color: #008000\">=<\/span> balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">GetWithLock<\/span><span style=\"color: #008000\">&lt;<\/span><span style=\"color: #6666cc;font-weight: bold\">string<\/span><span style=\"color: #008000\">&gt;<\/span><span style=\"color: #008000\">(<\/span>chave, <span style=\"color: #ff0000\">15<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\nAfirmar<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">IsTrue<\/span><span style=\"color: #008000\">(<\/span>getl<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Sucesso<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span> <span style=\"color: #008080;font-style: italic\">\/\/ter\u00e1 sucesso<\/span><\/p>\n<p>var unlock <span style=\"color: #008000\">=<\/span> balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Desbloqueio<\/span><span style=\"color: #008000\">(<\/span>chave, getl<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Cas<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\nAfirmar<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">IsTrue<\/span><span style=\"color: #008000\">(<\/span>desbloqueio<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Sucesso<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><\/p>\n<p>var upsert <span style=\"color: #008000\">=<\/span> balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Upsert<\/span><span style=\"color: #008000\">(<\/span>chave, <span style=\"color: #666666\">\"{'name':'value2\u2032}\"<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\nAfirmar<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">IsTrue<\/span><span style=\"color: #008000\">(<\/span>upsert<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Sucesso<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\n<span style=\"color: #008000\">}<\/span><\/p>\n<\/div>\n<\/div>\n<p>No exemplo acima, inserimos ou atualizamos uma chave usando o m\u00e9todo Upsert e, em seguida, bloqueamos a chave por 15 segundos, antes de desbloque\u00e1-la e, finalmente, executar outra muta\u00e7\u00e3o nela. Se n\u00e3o tiv\u00e9ssemos usado o m\u00e9todo Unlock, o m\u00e9todo Upsert final teria falhado com o status \"KeyExists\".<\/p>\n<h3>Ver melhorias<\/h3>\n<p>A API de visualiza\u00e7\u00e3o foi aprimorada para facilitar o uso de POCO (plain ole' csharp objects) como destino de uma solicita\u00e7\u00e3o de visualiza\u00e7\u00e3o.<\/p>\n<div class=\"geshifilter\">\n<div class=\"csharp geshifilter-csharp\" style=\"font-family: monospace\">\n<p><span style=\"color: #0600ff;font-weight: bold\">usando<\/span> <span style=\"color: #008000\">(<\/span>var bucket <span style=\"color: #008000\">=<\/span> _cluster<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">OpenBucket<\/span><span style=\"color: #008000\">(<\/span><span style=\"color: #666666\">\"amostra de cerveja\"<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">)<\/span><br \/>\n<span style=\"color: #008000\">{<\/span><br \/>\nvar query <span style=\"color: #008000\">=<\/span> balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Criar Consulta<\/span><span style=\"color: #008000\">(<\/span><span style=\"color: #666666\">\"cerveja\"<\/span>, <span style=\"color: #666666\">\"all_beers\"<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Limite<\/span><span style=\"color: #008000\">(<\/span><span style=\"color: #ff0000\">10<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\nvar result <span style=\"color: #008000\">=<\/span> balde<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Consulta<\/span><span style=\"color: #008000\">&lt;<\/span>Cerveja<span style=\"color: #008000\">&gt;<\/span><span style=\"color: #008000\">(<\/span>consulta<span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><\/p>\n<p><span style=\"color: #0600ff;font-weight: bold\">antes de<\/span> <span style=\"color: #008000\">(<\/span>var cerveja <span style=\"color: #0600ff;font-weight: bold\">em<\/span> resultado<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Valores<\/span><span style=\"color: #008000\">)<\/span><br \/>\n<span style=\"color: #008000\">{<\/span><br \/>\nConsole<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">WriteLine<\/span><span style=\"color: #008000\">(<\/span><span style=\"color: #666666\">\"{0} tem {1} abv.\"<\/span>, cerveja<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Nome<\/span>, cerveja<span style=\"color: #008000\">.<\/span><span style=\"color: #0000ff\">Abv<\/span><span style=\"color: #008000\">)<\/span><span style=\"color: #008000\">;<\/span><br \/>\n<span style=\"color: #008000\">}<\/span><br \/>\n<span style=\"color: #008000\">}<\/span><\/p>\n<p>E a sa\u00edda<span style=\"color: #008000\">:<\/span><br \/>\n<span style=\"color: #008000\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/span><br \/>\n21A IPA tem <span style=\"color: #ff0000\">7.2<\/span> abv<span style=\"color: #008000\">.<\/span><br \/>\n<span style=\"color: #ff0000\">563<\/span> Stout tem <span style=\"color: #ff0000\">5<\/span> abv<span style=\"color: #008000\">.<\/span><br \/>\n<span style=\"color: #0000ff\">Emenda<\/span> A Pale Ale tem <span style=\"color: #ff0000\">5.2<\/span> abv<span style=\"color: #008000\">.<\/span><br \/>\n<span style=\"color: #0000ff\">Amargo<\/span> A American tem <span style=\"color: #ff0000\">3.6<\/span> abv<span style=\"color: #008000\">.<\/span><br \/>\n<span style=\"color: #6666cc;font-weight: bold\">Duplo<\/span> O Trouble IPA tem <span style=\"color: #ff0000\">9.8<\/span> abv<span style=\"color: #008000\">.<\/span><br \/>\n<span style=\"color: #0000ff\">Geral<\/span> Pippo<span style=\"color: #666666\">'s Porter tem 5,5 abv.<br \/>\nA North Star Red tem 5,8 abv.<br \/>\nA Oyster Point Oyster Stout tem 5,9 abv.<br \/>\nA Potrero ESB tem 5,2 abv.<br \/>\nA South Park Blonde tem 5 abv.<\/span><\/p>\n<\/div>\n<\/div>\n<p>A grande diferen\u00e7a \u00e9 que os resultados da exibi\u00e7\u00e3o, a parte do valor, ser\u00e3o serializados em uma lista com o valor que hidrata o POCO. Observe que os campos id e key s\u00e3o ignorados nessa lista, mas ainda h\u00e1 uma propriedade Rows dispon\u00edvel que permite que voc\u00ea obtenha essas informa\u00e7\u00f5es.<\/p>\n<h2>O que mudou?<\/h2>\n<p>Embora tenhamos tentado evitar a quebra de qualquer interface j\u00e1 publicada na vers\u00e3o beta anterior, h\u00e1 algumas altera\u00e7\u00f5es que foram feitas porque contribuem para uma API final melhor:<\/p>\n<ul>\n<li>A interface e as implementa\u00e7\u00f5es do IDocumentResult foram alteradas: a propriedade Value foi renomeada para Content. Isso foi feito para torn\u00e1-lo mais consistente com o Java SDK. Observe que o valor de retorno dos m\u00e9todos que n\u00e3o s\u00e3o de documento continua sendo Value.<\/li>\n<li>A interface do ICluster foi tornada p\u00fablica (de interna) para facilitar a simula\u00e7\u00e3o e o teste<\/li>\n<\/ul>\n<h2>O que n\u00e3o est\u00e1 inclu\u00eddo nesta vers\u00e3o?<\/h2>\n<p>O principal recurso que falta \u00e9 o suporte a opera\u00e7\u00f5es ass\u00edncronas usando as palavras-chave TAP (Task Asynchrony Pattern) async e await. Esse recurso est\u00e1 em andamento, mas simplesmente n\u00e3o est\u00e1 pronto para o hor\u00e1rio nobre. Espere algo ainda este ano ou no in\u00edcio do pr\u00f3ximo.<\/p>\n<h2>Como obt\u00ea-lo?<\/h2>\n<p>Como em todas as vers\u00f5es, o GA est\u00e1 dispon\u00edvel no NuGet como um pacote, como um download direto dos bin\u00e1rios do S3, e o c\u00f3digo-fonte, como sempre, est\u00e1 dispon\u00edvel no GitHub:<\/p>\n<ul>\n<li>Os bin\u00e1rios s\u00e3o <a style=\"color: #007da4;text-decoration: none;line-height: inherit\" href=\"https:\/\/packages.couchbase.com.s3.amazonaws.com\/clients\/net\/2.0\/Couchbase-Net-Client-2.0.0%2B1.zip\">aqui.<\/a><\/li>\n<li>O reposit\u00f3rio \u00e9 <a style=\"color: #007da4;text-decoration: none;line-height: inherit\" href=\"https:\/\/github.com\/couchbase\/couchbase-net-client\">aqui<\/a>.<\/li>\n<li>Os pacotes NuGet s\u00e3o <a style=\"color: #007da4;text-decoration: none;line-height: inherit\" href=\"https:\/\/www.nuget.org\/packages\/CouchbaseNetClient\/2.0.0.1\">aqui<\/a>.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Today we are releasing the new Couchbase .NET SDK for General Availability! This is a complete rewrite of the SDK and is based off of the Couchbase SDK 2.0 Specification, meaning it maintains a consistent interface with all of the [&hellip;]<\/p>","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10127],"tags":[],"ppma_author":[8970],"class_list":["post-1849","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-c-sharp"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase .NET SDK 2.0 GA Available! - The Couchbase Blog<\/title>\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\/couchbase-net-sdk-20-ga-available\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase .NET SDK 2.0 GA Available!\" \/>\n<meta property=\"og:description\" content=\"Today we are releasing the new Couchbase .NET SDK for General Availability! This is a complete rewrite of the SDK and is based off of the Couchbase SDK 2.0 Specification, meaning it maintains a consistent interface with all of the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-ga-available\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-24T00:21:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:49:57+00:00\" \/>\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=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Couchbase .NET SDK 2.0 GA Available!\",\"datePublished\":\"2014-12-24T00:21:51+00:00\",\"dateModified\":\"2025-06-14T06:49:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/\"},\"wordCount\":894,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\".NET\",\"C#\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/\",\"name\":\"Couchbase .NET SDK 2.0 GA Available! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-24T00:21:51+00:00\",\"dateModified\":\"2025-06-14T06:49:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase .NET SDK 2.0 GA Available!\"}]},{\"@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\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"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:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812\",\"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":"Couchbase .NET SDK 2.0 GA dispon\u00edvel! - Blog do Couchbase","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\/couchbase-net-sdk-20-ga-available\/","og_locale":"pt_BR","og_type":"article","og_title":"Couchbase .NET SDK 2.0 GA Available!","og_description":"Today we are releasing the new Couchbase .NET SDK for General Availability! This is a complete rewrite of the SDK and is based off of the Couchbase SDK 2.0 Specification, meaning it maintains a consistent interface with all of the [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-net-sdk-20-ga-available\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-24T00:21:51+00:00","article_modified_time":"2025-06-14T06:49:57+00:00","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":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Couchbase .NET SDK 2.0 GA Available!","datePublished":"2014-12-24T00:21:51+00:00","dateModified":"2025-06-14T06:49:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/"},"wordCount":894,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":[".NET","C#"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/","name":"Couchbase .NET SDK 2.0 GA dispon\u00edvel! - Blog do Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-24T00:21:51+00:00","dateModified":"2025-06-14T06:49:57+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-net-sdk-20-ga-available\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase .NET SDK 2.0 GA Available!"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"Blog do Couchbase","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\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"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, engenheiro de software s\u00eanior, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812","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 \u00e9 engenheiro de software s\u00eanior da Couchbase. Antes de ingressar na Couchbase, Jeff passou seis anos na Source Interlink como arquiteto da Web corporativa. Jeff \u00e9 respons\u00e1vel pelo desenvolvimento dos SDKs do Couchbase e pela integra\u00e7\u00e3o com o N1QL (linguagem de consulta).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/jeff-morris\/"}]}},"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","author_category":"","last_name":"Jeff Morris, Senior Software Engineer, Couchbase","first_name":"Jeff","job_title":"","user_url":"","description":"Jeff Morris \u00e9 engenheiro de software s\u00eanior da Couchbase. Antes de ingressar na Couchbase, Jeff passou seis anos na Source Interlink como arquiteto da Web corporativa. Jeff \u00e9 respons\u00e1vel pelo desenvolvimento dos SDKs do Couchbase e pela integra\u00e7\u00e3o com o N1QL (linguagem de consulta)."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1849","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=1849"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1849"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}