{"id":2230,"date":"2016-04-21T16:12:26","date_gmt":"2016-04-21T16:12:25","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2230"},"modified":"2025-06-13T15:56:18","modified_gmt":"2025-06-13T22:56:18","slug":"released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","title":{"rendered":"Lan\u00e7ado: Linq2Couchbase v1.1.0, o provedor oficial de Linq para o Couchbase N1QL!"},"content":{"rendered":"<h2 id=\"released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql-\">Lan\u00e7ado: Linq2Couchbase v1.1.0, o provedor oficial de Linq para o Couchbase N1QL!<\/h2>\n<p>No in\u00edcio desta semana, lan\u00e7amos a v1.1.0 (especificamente a v1.1.0.2) do Linq2Couchbase, o provedor oficial de Linq para o Couchbase Server e <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">N1QL<\/a>! Esta vers\u00e3o inclui recursos novos e experimentais, bem como corre\u00e7\u00f5es de bugs e muitos, muitos aprimoramentos em rela\u00e7\u00e3o \u00e0 vers\u00e3o 1.0.X. Nesta postagem, discutiremos e demonstraremos os novos recursos quando aplic\u00e1vel!<\/p>\n<h2 id=\"contributors\">Contribuintes<\/h2>\n<p>O Linq2Couchbase \u00e9 um projeto orientado pela comunidade, o <a href=\"https:\/\/github.com\/brantburnett\">n\u00famero um<\/a> contribuinte (obrigado <a href=\"https:\/\/github.com\/brantburnett\">Brant<\/a>!) \u00e9 um membro da comunidade! Se voc\u00ea quiser contribuir ou enviar coment\u00e1rios, sinta-se \u00e0 vontade para faz\u00ea-lo na se\u00e7\u00e3o <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/issues\">projeto no github<\/a> ou o <a href=\"https:\/\/issues.couchbase.com\/projects\/LINQ\">Projeto Jira.<\/a><\/p>\n<h2 id=\"major-features-and-or-commits\">Principais recursos e\/ou confirma\u00e7\u00f5es<\/h2>\n<p>Mais de 30 commits foram inclu\u00eddos nessa vers\u00e3o, incluindo os seguintes recursos:<\/p>\n<ul>\n<li>Compatibilidade com serializadores personalizados estendendo o IExtendedTypeSerializer<\/li>\n<li>Suporte a fun\u00e7\u00f5es de data, como DATE_DIFF, DATE_ADD, DATE_PART e DATE_TRUNC<\/li>\n<li>Suporte para opera\u00e7\u00f5es Contains em matrizes<\/li>\n<li>Suporte para enumera\u00e7\u00e3o e constantes GUID em consultas<\/li>\n<li>Suporte para instru\u00e7\u00f5es UNION<\/li>\n<li>Documenta\u00e7\u00e3o XML em linha aprimorada<\/li>\n<li>Suporte para consultas LINQ ass\u00edncronas usando .ExecuteAsync<\/li>\n<li>Suporte para especificar o n\u00edvel de consist\u00eancia da consulta para RYOW<\/li>\n<li>Tratamento de erros aprimorado<\/li>\n<li>Diversas corre\u00e7\u00f5es de bugs<\/li>\n<\/ul>\n<p>Nos pr\u00f3ximos par\u00e1grafos, discutirei alguns dos recursos mais importantes\/\u00fateis.<\/p>\n<h3 id=\"change-tracking-and-proxying\">Controle de altera\u00e7\u00f5es e proxy<\/h3>\n<p>Um novo recurso \"experimental\" que adicionamos \u00e0 vers\u00e3o 1.1.0 \u00e9 o suporte ao rastreamento de altera\u00e7\u00f5es por meio de objetos proxy. O caso de uso desse recurso \u00e9 supor que voc\u00ea gostaria de modificar ou adicionar v\u00e1rios documentos, mas deseja que a muta\u00e7\u00e3o ocorra em lote em um momento posterior. Por exemplo, voc\u00ea deseja que o objeto BucketContext tenha a vida \u00fatil de uma solicita\u00e7\u00e3o da Web no ASP.NET: quando a solicita\u00e7\u00e3o come\u00e7a, voc\u00ea deseja que o contexto seja criado, dentro de qualquer m\u00e9todo de a\u00e7\u00e3o que voc\u00ea queira modificar ou adicionar documentos e, finalmente, quando a solicita\u00e7\u00e3o terminar, voc\u00ea deseja enviar tudo de volta ao servidor... ou reverter se ocorrer um erro.<\/p>\n<p>O controle de altera\u00e7\u00f5es \u00e9 ativado chamando o <code>BucketContext.EnableChangeTracking()<\/code> m\u00e9todo <strong><em>antes de<\/em><\/strong> iniciando uma consulta.<\/p>\n<pre><code>var db = new BucketContext(ClusterHelper.GetBucket(\"beer-sample\"));\r\ndb.BeginChangeTracking();\r\n\r\nvar query = from x in db.Query()\r\n            where x.Type == \"beer\"\r\n            select x;\r\n<\/code><\/pre>\n<p>Uma vez que ele \u00e9 chamado de <code>BucketContext<\/code> interceptar\u00e1 cada linha do conjunto de resultados e criar\u00e1 um proxy din\u00e2mico que far\u00e1 com que todas as altera\u00e7\u00f5es nas propriedades ou nas propriedades dos documentos filhos voltem para o <code>BucketContext<\/code>.<\/p>\n<p>Por exemplo, suponha que desejemos recuperar o primeiro documento da lista e modificar a propriedade <code>Abv<\/code>:<\/p>\n<pre><code>var beer = query.First();\r\nbeer.Abv = new decimal(12.6);\r\n<\/code><\/pre>\n<p>Quando a propriedade <code>Abv<\/code> for definido, ele acionar\u00e1 um evento que ir\u00e1 borbulhar at\u00e9 o <code>BucketContext<\/code> que armazenar\u00e1 uma refer\u00eancia ao documento modificado. A atualiza\u00e7\u00e3o real n\u00e3o ocorrer\u00e1 no Couchbase at\u00e9 mais tarde, quando <code>SubmitChanges<\/code> \u00e9 chamado.<\/p>\n<p>E quanto a adicionar um novo documento? Nesse caso, voc\u00ea criaria o documento normalmente e, em seguida, chamaria <code>Salvar<\/code> no <code>BucketContext<\/code>:<\/p>\n<pre><code>var newBeer = new Beer\r\n{\r\n    Abv = 5,\r\n    Category = \"ale\",\r\n    Name = \"Some Brew\"\r\n};\r\n\r\ndb.Save(newBeer);\r\n<\/code><\/pre>\n<p>A chamada para <code>db.Save<\/code> \u00e9 necess\u00e1rio para que o novo documento (que n\u00e3o \u00e9 uma procura\u00e7\u00e3o) possa ser <em>embrulhado<\/em> em um proxy e rastreado. Finalmente, quando queremos enviar as altera\u00e7\u00f5es de volta ao servidor, chamamos <code>SubmitChanges<\/code>:<\/p>\n<pre><code>db.SubmitChanges();\r\n<\/code><\/pre>\n<p>Aguarde um exemplo muito mais detalhado em uma publica\u00e7\u00e3o futura, na qual criaremos um aplicativo ASP.NET MVC e mostraremos como o <code>BucketContext<\/code> pode ser usado em um controlador ASP.NEW como uma unidade de trabalho (UoW) com escopo para a solicita\u00e7\u00e3o da Web.<\/p>\n<h3 id=\"custom-serializers-via-iextendedtypeserializer\">Serializadores personalizados por meio do IExtendedTypeSerializer<\/h3>\n<p>H\u00e1 algum tempo, o SDK do Couchbase .NET oferece suporte a serializadores personalizados. O serializador padr\u00e3o \u00e9 baseado no NewtonSoft JSON.NET, que \u00e9 um serializador completo e bem suportado; no entanto, em alguns casos, voc\u00ea pode querer usar outro serializador, como o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/using-jil-for-custom-json-serialization-in-the-couchbase-.net-sdk\/\">Jil<\/a> ou <a href=\"https:\/\/github.com\/ServiceStack\/ServiceStack.Text\">Pilha de servi\u00e7os<\/a>'s Text. Para oferecer suporte a outros serializadores JSON que n\u00e3o sejam da NewtonSoft em <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Linq2Couchbase<\/a>Adicionamos uma nova interface chamada IExtendedTypeSerializer. Al\u00e9m disso, o mecanismo de serializa\u00e7\u00e3o foi estendido para incluir o QueryRequest como um ponto de integra\u00e7\u00e3o, o que significa que um serializador personalizado pode ser usado por solicita\u00e7\u00e3o, em vez de uniformemente em todo o Couchbase .NET SDK.<\/p>\n<h3 id=\"support-for-n1ql-date-functions\">Suporte para fun\u00e7\u00f5es de data N1QL<\/h3>\n<p>O N1QL oferece suporte a muitas fun\u00e7\u00f5es Date que n\u00e3o se traduzem diretamente em m\u00e9todos DateTime do .NET. Nesta vers\u00e3o, adicionamos suporte a v\u00e1rias dessas fun\u00e7\u00f5es <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/n1ql\/n1ql-language-reference\/datefun.html\">Fun\u00e7\u00e3o de data N1QL<\/a>s incluindo:<\/p>\n<ul>\n<li>DATE_DIFF_STR<\/li>\n<li>DATE_ADD_STR<\/li>\n<li>DATE_PART_STR<\/li>\n<li>DATE_TRUNC_STR<\/li>\n<\/ul>\n<p>Al\u00e9m disso, foi adicionada uma nova enumera\u00e7\u00e3o chamada N1QLDatePart para o par\u00e2metro de parte da data aceito por cada fun\u00e7\u00e3o. Voc\u00ea pode ler mais sobre como trabalhar com datas <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/blob\/master\/docs\/date-handling.md\">aqui<\/a>.<\/p>\n<h3 id=\"update-to-relinq-2-0-and-use-ilrepack\">Atualize para o Relinq 2.0 e use o ILRepack<\/h3>\n<p><a href=\"https:\/\/github.com\/re-motion\/Relinq\">Relinq<\/a>a biblioteca de c\u00f3digo aberto que o Linq2Couchbase (<a href=\"https:\/\/nhibernate.info\/\">NHibernate<\/a> e <a href=\"https:\/\/github.com\/aspnet\/EntityFramework\">Estrutura de entidades 7<\/a> tamb\u00e9m) lan\u00e7ou recentemente a vers\u00e3o 2.0, portanto, atualizamos para a mais recente. Para facilitar o uso do Linq2Couchbase com o EF 7 no mesmo projeto e reduzir o n\u00famero de depend\u00eancias necess\u00e1rias, o Relinq (e o <a href=\"https:\/\/www.castleproject.org\/\">Castelo.Core<\/a>) foram mescladas no momento da compila\u00e7\u00e3o usando <a href=\"https:\/\/github.com\/gluck\/il-repack\">ILRepack<\/a> no pacote NuGet.<\/p>\n<h3 id=\"support-for-union-and-union-all-statements\">Suporte para <code>UNI\u00c3O<\/code> e <code>UNION ALL<\/code> Declara\u00e7\u00f5es<\/h3>\n<p>Para combinar os resultados de mais duas consultas em um \u00fanico conjunto de resultados, o N1QL tem dois comandos especiais: <code>UNI\u00c3O<\/code> e <code>UNION ALL<\/code>.<\/p>\n<p>UNION retorna os resultados distintos de cada consulta e agora \u00e9 compat\u00edvel com o Linq2Couchbase. Por exemplo, a seguinte consulta Linq:<\/p>\n<pre><code> var query = db.Query(mockBucket.Object)\r\n                .Where(e =&gt; e.Type == \"beer\")\r\n                .Select(e =&gt; new { e.Name })\r\n                .Union(\r\n                     db.QueryBrewery&gt;(mockBucket.Object)\r\n                        .Where(e =&gt; e.Type == \"brewery\")\r\n                        .Select(e =&gt; new { e.Name }));\r\n<\/code><\/pre>\n<p>Ser\u00e1 gerada em uma consulta N1QL semelhante a esta:<\/p>\n<pre><code>SELECT `Extent1`.`name` as `Name` FROM `default` as `Extent1` WHERE (`Extent1`.`type` = 'beer') \r\nUNION \r\nSELECT `Extent2`.`name` as `Name` FROM `default` as `Extent2` WHERE (`Extent2`.`type` = 'brewery');\r\n<\/code><\/pre>\n<p><code>UNION ALL<\/code> retorna duplicatas e a sintaxe do Linq \u00e9 um pouco diferente, pois usamos o m\u00e9todo Concat:<\/p>\n<pre><code>var query = db.Query(mockBucket.Object)\r\n                .Where(e =&gt; e.Type == \"beer\")\r\n                .Select(e =&gt; new { e.Name })\r\n                .Concat(\r\n                    db.Query(mockBucket.Object)\r\n                        .Where(e =&gt; e.Type == \"brewery\")\r\n                        .Select(e =&gt; new { e.Name }));\r\n<\/code><\/pre>\n<p>A consulta N1QL emitida ter\u00e1 a seguinte apar\u00eancia:<\/p>\n<pre><code>SELECT `Extent1`.`name` as `Name` FROM `default` as `Extent1` WHERE (`Extent1`.`type` = 'beer'\r\nUNION ALL\r\nSELECT `Extent2`.`name` as `Name` FROM `default` as `Extent2` WHERE (`Extent2`.`type` = 'brewery'\r\n<\/code><\/pre>\n<p>Observe que v\u00e1rios <code>UNI\u00c3O<\/code>s tamb\u00e9m podem ser aplicados!<\/p>\n<h3 id=\"asynchronous-linq-queries\">Consultas ass\u00edncronas de Linq<\/h3>\n<p>Outro recurso interessante que foi adicionado \u00e9 o suporte a consultas Linq ass\u00edncronas usando o <code>ass\u00edncrono<\/code> e <code>aguardar<\/code> que s\u00e3o incorporados ao C#\/.NET. Observe que h\u00e1 suporte para IEnumerable e escalar (Sum, First(), Any()).<\/p>\n<p>Aqui est\u00e1 um exemplo que retorna um valor IEnumerable:<\/p>\n<pre><code>var beers = from b in context.Query()\r\n            select b;\r\n\r\nvar results = (await beers.Take(1).ExecuteAsync()).ToList();\r\n<\/code><\/pre>\n<p>Aqui est\u00e1 outro exemplo que demonstra a execu\u00e7\u00e3o de um valor escalar:<\/p>\n<pre><code>var beers = from b in context.Query()\r\n            select b;\r\n\r\nvar result = await beers.ExecuteAsync(p =&gt; p.Average(q =&gt; q.Abv));\r\n<\/code><\/pre>\n<p>Em ambos os casos, a solicita\u00e7\u00e3o de consulta ser\u00e1 executada de forma n\u00e3o bloqueada (como um pool de threads). Coisas legais.<\/p>\n<h2 id=\"how-to-get-it\">Como obt\u00ea-lo<\/h2>\n<p>Voc\u00ea pode obter a vers\u00e3o 1.1.0 do Linq2Couchbase:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Linq2Couchbase\/1.1.0.2\">Pacotes NuGet<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\/tree\/1.1.0\">Puxando a fonte<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and N1QL! This release includes new and experimental features as well as bug [&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],"tags":[1468,1469],"ppma_author":[8970],"class_list":["post-2230","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-linq","tag-linq2couchbase"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - 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\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!\" \/>\n<meta property=\"og:description\" content=\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and N1QL! This release includes new and experimental features as well as bug [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-21T16:12:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T22:56:18+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\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!\",\"datePublished\":\"2016-04-21T16:12:25+00:00\",\"dateModified\":\"2025-06-13T22:56:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\"},\"wordCount\":958,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Linq\",\"linq2couchbase\"],\"articleSection\":[\".NET\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\",\"name\":\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-21T16:12:25+00:00\",\"dateModified\":\"2025-06-13T22:56:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#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\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!\"}]},{\"@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":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog","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\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","og_locale":"pt_BR","og_type":"article","og_title":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!","og_description":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! Earlier this week we released v1.1.0 (specifically v1.1.0.2) of Linq2Couchbase, the official Linq Provider for Couchbase Server and N1QL! This release includes new and experimental features as well as bug [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-04-21T16:12:25+00:00","article_modified_time":"2025-06-13T22:56:18+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\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!","datePublished":"2016-04-21T16:12:25+00:00","dateModified":"2025-06-13T22:56:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/"},"wordCount":958,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Linq","linq2couchbase"],"articleSection":[".NET"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/","name":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL! - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-21T16:12:25+00:00","dateModified":"2025-06-13T22:56:18+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#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\/released-linq2couchbase-v1-1-0-the-official-linq-provider-for-couchbase-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Released: Linq2Couchbase v1.1.0 the official Linq provider for Couchbase N1QL!"}]},{"@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\/2230","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=2230"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2230\/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=2230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2230"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}