{"id":4828,"date":"2025-07-16T10:17:31","date_gmt":"2025-07-16T17:17:31","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/"},"modified":"2025-07-16T10:17:31","modified_gmt":"2025-07-16T17:17:31","slug":"ef-core-couchbase-integrations","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/","title":{"rendered":"3 EF Core Integrations That Work with Couchbase"},"content":{"rendered":"\n<p>Couchbase\u2019s new <a href=\"https:\/\/docs.couchbase.com\/efcore-provider\/current\/overview.html\" target=\"_blank\" rel=\"noopener\">EF Core provider<\/a> opens the door to some powerful .NET integrations: even ones traditionally tied to relational databases. This post walks through how Identity, GraphQL, and OData all work with Couchbase.<\/p>\n\n\n\n<p>In this post, I\u2019ll walk through <b>three advanced EF Core integrations<\/b> that I have successfully tested with Couchbase:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><b>ASP.NET Core Identity<\/b><\/li>\n\n\n<li><b>GraphQL (via Hot Chocolate)<\/b><\/li>\n\n\n<li><b>OData<\/b><\/li>\n\n<\/ol>\n\n\n\n<p><strong>Note:\u00a0<\/strong>These integrations are based on limited testing and are not officially supported (yet). Your mileage may vary, but so far, they show a lot of promise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ASP.NET Core Identity<\/h2>\n\n\n\n<p><em><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.Identity.EntityFrameworkCore\" target=\"_blank\" rel=\"noopener\">Microsoft.AspNetCore.Identity.EntityFrameworkCore<\/a><\/em> provides a plug-and-play authentication and user management system for ASP.NET apps.<\/p>\n\n\n\n<p>Couchbase\u2019s EF Core provider works well with it. The only caveat is that you\u2019ll need to make sure the <strong>proper collections exist first<\/strong> (like AspNetUsers, AspNetRoles, etc).<\/p>\n\n\n\n<p><strong>Note:\u00a0<\/strong>You must create the following collections in advance: AspNetUsers, AspNetRoles, AspNetUserRoles, AspNetUserClaims, AspNetUserLogins, AspNetUserTokens, AspNetRoleClaims.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example EF setup<\/h3>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]public class AppDbContext : IdentityDbContext&lt;ApplicationUser&gt;<br \/>\n{<br \/>\n\u00a0 \u00a0 public AppDbContext(DbContextOptions&lt;AppDbContext&gt; options) : base(options) { }<\/p>\n<p>\u00a0 \u00a0 protected override void OnModelCreating(ModelBuilder builder)<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 base.OnModelCreating(builder);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;ApplicationUser&gt;().ToCouchbaseCollection(this, &#8220;AspNetUsers&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;IdentityRole&gt;().ToCouchbaseCollection(this, &#8220;AspNetRoles&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;IdentityUserRole&lt;string&gt;&gt;().ToCouchbaseCollection(this, &#8220;AspNetUserRoles&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;IdentityUserClaim&lt;string&gt;&gt;().ToCouchbaseCollection(this, &#8220;AspNetUserClaims&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;IdentityUserLogin&lt;string&gt;&gt;().ToCouchbaseCollection(this, &#8220;AspNetUserLogins&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;IdentityUserToken&lt;string&gt;&gt;().ToCouchbaseCollection(this, &#8220;AspNetUserTokens&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 builder.Entity&lt;IdentityRoleClaim&lt;string&gt;&gt;().ToCouchbaseCollection(this, &#8220;AspNetRoleClaims&#8221;);<br \/>\n\u00a0 \u00a0 }<br \/>\n}<\/p>\n<p>public class ApplicationUser : IdentityUser { }[\/crayon]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MVC auth example<\/h3>\n\n\n\n<p>Here\u2019s an ASP.NET Core MVC controller with registration, login, and logout, as well as a custom role:<\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]public class AuthController : Controller<br \/>\n{<br \/>\n\u00a0 \u00a0 private readonly UserManager&lt;ApplicationUser&gt; _userManager;<br \/>\n\u00a0 \u00a0 private readonly SignInManager&lt;ApplicationUser&gt; _signInManager;<br \/>\n\u00a0 \u00a0 private readonly RoleManager&lt;IdentityRole&gt; _roleManager;<\/p>\n<p>\u00a0 \u00a0 public AuthController(UserManager&lt;ApplicationUser&gt; userManager, SignInManager&lt;ApplicationUser&gt; signInManager, RoleManager&lt;IdentityRole&gt; roleManager)<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 _userManager = userManager;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 _signInManager = signInManager;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 _roleManager = roleManager;<br \/>\n\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 public IActionResult Register() =&gt; View();<\/p>\n<p>\u00a0 \u00a0 [HttpPost]<br \/>\n\u00a0 \u00a0 public async Task&lt;IActionResult&gt; Register(RegisterModel model)<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 if (!ModelState.IsValid) return View(model);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 var user = new ApplicationUser { UserName = model.Email, Email = model.Email };<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 var result = await _userManager.CreateAsync(user, model.Password);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 if (result.Succeeded)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var roleName = &#8220;CustomRole&#8221;;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (!await _roleManager.RoleExistsAsync(roleName))<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 await _roleManager.CreateAsync(new IdentityRole(roleName));<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 await _userManager.AddToRoleAsync(user, roleName);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 await _signInManager.SignInAsync(user, isPersistent: false);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return RedirectToAction(&#8220;Index&#8221;, &#8220;Home&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 foreach (var error in result.Errors) ModelState.AddModelError(&#8220;&#8221;, error.Description);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 return View(model);<br \/>\n\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 public IActionResult Login() =&gt; View();<\/p>\n<p>\u00a0 \u00a0 [HttpPost]<br \/>\n\u00a0 \u00a0 public async Task&lt;IActionResult&gt; Login(LoginModel model)<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 if (!ModelState.IsValid) return View(model);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 if (result.Succeeded)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return RedirectToAction(&#8220;Index&#8221;, &#8220;Home&#8221;);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 ModelState.AddModelError(&#8220;&#8221;, &#8220;Invalid login attempt.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 return View(model);<br \/>\n\u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 public async Task&lt;IActionResult&gt; Logout()<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 await _signInManager.SignOutAsync();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 return RedirectToAction(&#8220;Index&#8221;, &#8220;Home&#8221;);<br \/>\n\u00a0 \u00a0 }<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p>The data follows the standard Identity structure, stored in a Couchbase document. For example, a document in <em>AspNetUser<\/em> collection:<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17314\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image1-1-14.png\" alt=\"A document in AspNetUser collection\" width=\"464\" height=\"338\"><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">GraphQL with Hot Chocolate<\/h2>\n\n\n\n<p><a href=\"https:\/\/chillicream.com\/docs\/hotchocolate\/v15\" target=\"_blank\" rel=\"noopener\">Hot Chocolate<\/a> is a popular GraphQL server for .NET. It can integrate with EF Core, leaning on the LINQ capabilities of the provider (which Couchbase has). This means that GraphQL queries are translated to LINQ, which is then translated to Couchbase SQL++.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Setup<\/h3>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]public class WidgetQuery<br \/>\n{<br \/>\n\u00a0 \u00a0 [UseFiltering]<br \/>\n\u00a0 \u00a0 [UseSorting]<br \/>\n\u00a0 \u00a0 public IQueryable&lt;Widget&gt; GetWidgets([Service] WidgetDbContext dbContext)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 =&gt; dbContext.Widgets;<br \/>\n}<\/p>\n<p>\/\/ Program.cs:<\/p>\n<p>builder.Services<br \/>\n\u00a0 \u00a0 .AddGraphQLServer()<br \/>\n\u00a0 \u00a0 .AddQueryType&lt;WidgetQuery&gt;()<br \/>\n\u00a0 \u00a0 .AddFiltering()<br \/>\n\u00a0 \u00a0 .AddSorting()<br \/>\n\u00a0 \u00a0 .AddProjections();<\/p>\n<p>app.MapGraphQL();[\/crayon]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example usage<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <em>\/graphql<\/em> in browser (this brings up a web interface)<\/li>\n\n<\/ul>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17315\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image3-1-8.png\" alt=\"\" width=\"945\" height=\"756\"><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Try a query like this:<\/li>\n\n<\/ul>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]query {<br \/>\n  widgets(where: { name: { contains: &#8220;foo&#8221; } }, order: { createdDt: DESC }) {<br \/>\n    id<br \/>\n    name<br \/>\n    price<br \/>\n    numInStock<br \/>\n    createdDt<br \/>\n  }<br \/>\n}<br \/>\n[\/crayon]<\/p>\n\n\n\n<p>This will return results like:<\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]{<br \/>\n  &#8220;data&#8221;: {<br \/>\n    &#8220;widgets&#8221;: [<br \/>\n      {<br \/>\n        &#8220;id&#8221;: &#8220;b5c494fe-135f-4f01-bf12-6e4ad1eee829&#8221;,<br \/>\n        &#8220;name&#8221;: &#8220;foobar&#8221;,<br \/>\n        &#8220;price&#8221;: 1.99,<br \/>\n        &#8220;numInStock&#8221;: 50,<br \/>\n        &#8220;createdDt&#8221;: &#8220;2025-06-18T18:11:19.149Z&#8221;<br \/>\n      }<br \/>\n    ]<br \/>\n  }<br \/>\n}[\/crayon]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GraphQL queries need to match your GSI indexes (it\u2019s just SQL++ queries under the hood).<\/li>\n\n\n<li>You can use <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/covering-indexes.html\" target=\"_blank\" rel=\"noopener\">cover indexes<\/a> and other SQL++ indexes to improve performance.<\/li>\n\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OData<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.OData\" target=\"_blank\" rel=\"noopener\">Microsoft.AspNetCore.OData<\/a> exposes your EF Core data as OData endpoints, making it easy to connect tools like Excel, Power BI, and Tableau to Couchbase.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sample program.cs<\/h3>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]builder.Services.AddControllersWithViews()<br \/>\n  .AddOData(opt =&gt;<br \/>\n  {<br \/>\n    var odataBuilder = new ODataConventionModelBuilder();<br \/>\n    odataBuilder.EntitySet&lt;Widget&gt;(&#8220;Widgets&#8221;);<\/p>\n<p>    opt.AddRouteComponents(&#8220;odata&#8221;, odataBuilder.GetEdmModel())<br \/>\n      .Filter()<br \/>\n      .OrderBy()<br \/>\n      .Select()<br \/>\n      .Expand()<br \/>\n      .Count()<br \/>\n      .SetMaxTop(100);<br \/>\n  });[\/crayon]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Controller<\/h3>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;][HttpGet(&#8220;\/odata\/Widgets&#8221;)]<br \/>\n[EnableQuery]<br \/>\npublic IQueryable&lt;Widget&gt; GetOData() =&gt; _context.Widgets;[\/crayon]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example OData queries<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>https:\/\/localhost:7037\/odata\/Widgets?$filter=price gt 1&amp;$orderby=name<\/li>\n\n\n<li>https:\/\/localhost:7037\/odata\/Widgets?$select=name,price&amp;$top=10<\/li>\n\n<\/ul>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-17316\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image2-1-10.png\" alt=\"\" width=\"593\" height=\"572\"><\/p>\n\n\n\n<p><strong>Note:<\/strong> Make sure your EF Core LINQ queries can be translated to SQL++ and that any filtered\/sorted fields are indexed in Couchbase.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping up<\/h2>\n\n\n\n<p>All of these integrations are backed by EF Core\u2014and now, with Couchbase support, you can take full advantage of them in your code. Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible.<\/p>\n\n\n\n<p>Curious to see more? Let us know what integrations you\u2019d like to explore next!<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/couchbase-on-discord\/\" target=\"_blank\" rel=\"noopener\">Discord<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.couchbase.com\/forums\/c\/net-sdk\" target=\"_blank\" rel=\"noopener\">Couchbase .NET Forums<\/a><\/li>\n\n\n<li><a href=\"https:\/\/docs.couchbase.com\/efcore-provider\/current\/overview.html\" target=\"_blank\" rel=\"noopener\">Couchbase EF Core documentation<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=KNIMjTHtxRs\" target=\"_blank\" rel=\"noopener\">Check out this short video for a walkthrough of the EF Core integrations covered in this post.<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=0UDFJvMg5Wc\" target=\"_blank\" rel=\"noopener\">You can also watch the .NET Community Standup featuring the Couchbase EF Core provider and its capabilities.<\/a><\/li>\n\n<\/ul>\n\n\n\n<p><iframe loading=\"lazy\" title=\".NET Data Community Standup - Couchbase has an EF Core provider\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/0UDFJvMg5Wc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Couchbase\u2019s new EF Core provider opens the door to some powerful .NET integrations: even ones traditionally tied to relational databases. This post walks through how Identity, GraphQL, and OData all work with Couchbase. In this post, I\u2019ll walk through three advanced EF Core integrations that I have successfully tested with Couchbase: Note:\u00a0These integrations are based [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":4827,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[33,188,178],"tags":[333,327,334],"ppma_author":[186],"class_list":["post-4828","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-connectors","tag-entity-framework","tag-graphql","tag-linq"],"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>3 EF Core Integrations That Work with Couchbase - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible\" \/>\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\/ef-core-couchbase-integrations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3 EF Core Integrations That Work with Couchbase\" \/>\n<meta property=\"og:description\" content=\"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-16T17:17:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-ef-core-integrations.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"3 EF Core Integrations That Work with Couchbase\",\"datePublished\":\"2025-07-16T17:17:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/\"},\"wordCount\":949,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-ef-core-integrations.png\",\"keywords\":[\"Entity Framework\",\"graphql\",\"Linq\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"Connectors\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/\",\"name\":\"3 EF Core Integrations That Work with Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-ef-core-integrations.png\",\"datePublished\":\"2025-07-16T17:17:31+00:00\",\"description\":\"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-ef-core-integrations.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-ef-core-integrations.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/ko\\\/ef-core-couchbase-integrations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3 EF Core Integrations That Work with Couchbase\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\\\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\\\/\\\/crosscuttingconcerns.com\",\"https:\\\/\\\/x.com\\\/mgroves\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/matthew-groves\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"3 EF Core Integrations That Work with Couchbase - The Couchbase Blog","description":"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible","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\/ef-core-couchbase-integrations\/","og_locale":"en_US","og_type":"article","og_title":"3 EF Core Integrations That Work with Couchbase","og_description":"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible","og_url":"https:\/\/www.couchbase.com\/blog\/ef-core-couchbase-integrations\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-07-16T17:17:31+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-ef-core-integrations.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"3 EF Core Integrations That Work with Couchbase","datePublished":"2025-07-16T17:17:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/"},"wordCount":949,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-ef-core-integrations.png","keywords":["Entity Framework","graphql","Linq"],"articleSection":[".NET","ASP.NET","Connectors"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/","url":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/","name":"3 EF Core Integrations That Work with Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-ef-core-integrations.png","datePublished":"2025-07-16T17:17:31+00:00","description":"Whether you\u2019re building secure web applications, GraphQL APIs or integrating with BI tools, The EF Core and Couchbase combo makes it possible","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-ef-core-integrations.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-ef-core-integrations.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/ko\/ef-core-couchbase-integrations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"3 EF Core Integrations That Work with Couchbase"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/"}]}},"acf":[],"authors":[{"term_id":186,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","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\/wp-json\/wp\/v2\/posts\/4828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=4828"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4828\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/4827"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=4828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=4828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=4828"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=4828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}