[{"data":1,"prerenderedAt":1034},["ShallowReactive",2],{"blog:2010:creating-rss-feeds-in-asp-net-mvc":3,"blogMore-Development":1020,"comments-creating-rss-feeds-in-asp-net-mvc":1033},{"id":4,"title":5,"body":6,"category":1003,"commentCount":158,"date":1004,"description":12,"excerpt":1005,"extension":1006,"filenames":1007,"hidden":1008,"image":1007,"meta":1009,"minutes":144,"navigation":193,"path":1010,"seo":1011,"showCategory":1007,"stem":1012,"tags":1013,"updated":1007,"url":1017,"wordCount":1018,"__hash__":1019},"content\u002Fblog\u002F2010\u002Fcreating-rss-feeds-in-asp-net-mvc.md","Creating RSS feeds in ASP.NET MVC",{"type":7,"value":8,"toc":1001},"minimark",[9,13,16,19,22,57,60,79,82,677,696,963,966,992,997],[10,11,12],"p",{},"ASP.NET MVC is the technology that brought me to Microsoft and the west-coast and it’s been fun getting to grips with it these last few weeks.",[10,14,15],{},"Last week I needed to expose RSS feeds and checked out some examples online but was very disappointed.",[10,17,18],{},"If you find yourself contemplating writing code to solve technical problems rather than the specific business domain you work in you owe it to your employer and fellow developers to see what exists before churning out code to solve it.",[10,20,21],{},"The primary excuse (and I admit to using it myself) is “X is too bloated, I only need a subset. I can write that quicker than learn their solution.” but a quick reality check:",[23,24,25,33,39,45,51],"ul",{},[26,27,28,32],"li",{},[29,30,31],"em",{},"Time",": code always takes longer than you think",[26,34,35,38],{},[29,36,37],{},"Bloat",": indicates the problem is more complex than you realize",[26,40,41,44],{},[29,42,43],{},"Growth",": todays requirements will grow tomorrow",[26,46,47,50],{},[29,48,49],{},"Maintenance",": fixing code outside your business domain",[26,52,53,56],{},[29,54,55],{},"Isolation",": nobody coming in will know your home-grown solution",[10,58,59],{},"The RSS examples I found had their own ‘feed’ and ‘items’ classes and implemented flaky XML rendering by themselves or as MVC view pages.",[10,61,62,63,67,68,71,72,67,75,78],{},"If these people had spent a little time doing some research they would have discovered .NET’s built ",[64,65,66],"code",{},"in SyndicatedFeed"," and ",[64,69,70],{},"SyndicatedItem"," class for content and two classes (",[64,73,74],{},"Rss20FeedFormatter",[64,76,77],{},"Atom10FeedFormatter"," )  to handle XML generation with correct encoding, formatting and optional fields.",[10,80,81],{},"All that is actually required is a small class to wire up these built-in classes to MVC.",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-csharp shiki shiki-themes everforest-light dracula","using System;\nusing System.ServiceModel.Syndication;\nusing System.Text;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Xml;\n\nnamespace MyApplication.Something\n{\n  public class FeedResult : ActionResult {\n    public Encoding ContentEncoding { get; set; }\n    public string ContentType { get; set; }\n\n    private readonly SyndicationFeedFormatter feed;\n    public SyndicationFeedFormatter Feed{\n      get { return feed; }\n    }\n\n    public FeedResult(SyndicationFeedFormatter feed) {\n      this.feed = feed;\n    }\n\n    public override void ExecuteResult(ControllerContext context) {\n      if (context == null)\n        throw new ArgumentNullException(\"context\");\n\n      var response = context.HttpContext.Response;\n      response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : \"application\u002Frss+xml\";\n\n      if (ContentEncoding != null)\n        response.ContentEncoding = ContentEncoding;\n\n      if (feed != null) {\n        using (var xmlWriter = new XmlTextWriter(response.Output)) {\n          xmlWriter.Formatting = Formatting.Indented;\n          feed.WriteTo(xmlWriter);\n        }\n      }\n    }\n  }\n}\n","csharp","",[64,90,91,108,128,142,156,174,188,195,210,216,240,265,284,289,304,314,329,335,340,361,379,384,389,413,432,459,464,489,533,538,553,567,572,586,617,636,648,654,660,665,671],{"__ignoreMap":88},[92,93,96,100,104],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"smiwp","using",[92,101,103],{"class":102},"sjYfO"," System",[92,105,107],{"class":106},"s6Vpi",";\n",[92,109,111,113,115,118,121,123,126],{"class":94,"line":110},2,[92,112,99],{"class":98},[92,114,103],{"class":102},[92,116,117],{"class":106},".",[92,119,120],{"class":102},"ServiceModel",[92,122,117],{"class":106},[92,124,125],{"class":102},"Syndication",[92,127,107],{"class":106},[92,129,131,133,135,137,140],{"class":94,"line":130},3,[92,132,99],{"class":98},[92,134,103],{"class":102},[92,136,117],{"class":106},[92,138,139],{"class":102},"Text",[92,141,107],{"class":106},[92,143,145,147,149,151,154],{"class":94,"line":144},4,[92,146,99],{"class":98},[92,148,103],{"class":102},[92,150,117],{"class":106},[92,152,153],{"class":102},"Web",[92,155,107],{"class":106},[92,157,159,161,163,165,167,169,172],{"class":94,"line":158},5,[92,160,99],{"class":98},[92,162,103],{"class":102},[92,164,117],{"class":106},[92,166,153],{"class":102},[92,168,117],{"class":106},[92,170,171],{"class":102},"Mvc",[92,173,107],{"class":106},[92,175,177,179,181,183,186],{"class":94,"line":176},6,[92,178,99],{"class":98},[92,180,103],{"class":102},[92,182,117],{"class":106},[92,184,185],{"class":102},"Xml",[92,187,107],{"class":106},[92,189,191],{"class":94,"line":190},7,[92,192,194],{"emptyLinePlaceholder":193},true,"\n",[92,196,198,202,205,207],{"class":94,"line":197},8,[92,199,201],{"class":200},"s6f1k","namespace",[92,203,204],{"class":102}," MyApplication",[92,206,117],{"class":106},[92,208,209],{"class":102},"Something\n",[92,211,213],{"class":94,"line":212},9,[92,214,215],{"class":106},"{\n",[92,217,219,223,226,230,233,237],{"class":94,"line":218},10,[92,220,222],{"class":221},"s9HRq","  public",[92,224,225],{"class":98}," class",[92,227,229],{"class":228},"sPLAf"," FeedResult",[92,231,232],{"class":106}," : ",[92,234,236],{"class":235},"snuxY","ActionResult",[92,238,239],{"class":106}," {\n",[92,241,243,246,249,252,256,259,262],{"class":94,"line":242},11,[92,244,245],{"class":221},"    public",[92,247,248],{"class":235}," Encoding",[92,250,251],{"class":106}," ContentEncoding { ",[92,253,255],{"class":254},"sXAHl","get",[92,257,258],{"class":106},"; ",[92,260,261],{"class":254},"set",[92,263,264],{"class":106},"; }\n",[92,266,268,270,273,276,278,280,282],{"class":94,"line":267},12,[92,269,245],{"class":221},[92,271,272],{"class":254}," string",[92,274,275],{"class":106}," ContentType { ",[92,277,255],{"class":254},[92,279,258],{"class":106},[92,281,261],{"class":254},[92,283,264],{"class":106},[92,285,287],{"class":94,"line":286},13,[92,288,194],{"emptyLinePlaceholder":193},[92,290,292,295,298,301],{"class":94,"line":291},14,[92,293,294],{"class":221},"    private",[92,296,297],{"class":221}," readonly",[92,299,300],{"class":235}," SyndicationFeedFormatter",[92,302,303],{"class":106}," feed;\n",[92,305,307,309,311],{"class":94,"line":306},15,[92,308,245],{"class":221},[92,310,300],{"class":235},[92,312,313],{"class":106}," Feed{\n",[92,315,317,320,323,326],{"class":94,"line":316},16,[92,318,319],{"class":254},"      get",[92,321,322],{"class":106}," { ",[92,324,325],{"class":98},"return",[92,327,328],{"class":106}," feed; }\n",[92,330,332],{"class":94,"line":331},17,[92,333,334],{"class":106},"    }\n",[92,336,338],{"class":94,"line":337},18,[92,339,194],{"emptyLinePlaceholder":193},[92,341,343,345,348,351,354,358],{"class":94,"line":342},19,[92,344,245],{"class":221},[92,346,229],{"class":347},"sS4Kt",[92,349,350],{"class":106},"(",[92,352,353],{"class":235},"SyndicationFeedFormatter",[92,355,357],{"class":356},"s7cAX"," feed",[92,359,360],{"class":106},") {\n",[92,362,364,368,370,374,377],{"class":94,"line":363},20,[92,365,367],{"class":366},"sKO3f","      this",[92,369,117],{"class":106},[92,371,373],{"class":372},"sSKRk","feed",[92,375,376],{"class":221}," =",[92,378,303],{"class":106},[92,380,382],{"class":94,"line":381},21,[92,383,334],{"class":106},[92,385,387],{"class":94,"line":386},22,[92,388,194],{"emptyLinePlaceholder":193},[92,390,392,394,397,400,403,405,408,411],{"class":94,"line":391},23,[92,393,245],{"class":221},[92,395,396],{"class":221}," override",[92,398,399],{"class":254}," void",[92,401,402],{"class":347}," ExecuteResult",[92,404,350],{"class":106},[92,406,407],{"class":235},"ControllerContext",[92,409,410],{"class":356}," context",[92,412,360],{"class":106},[92,414,416,419,422,425,429],{"class":94,"line":415},24,[92,417,418],{"class":98},"      if",[92,420,421],{"class":106}," (context ",[92,423,424],{"class":221},"==",[92,426,428],{"class":427},"s3Ipq"," null",[92,430,431],{"class":106},")\n",[92,433,435,438,441,444,446,450,454,456],{"class":94,"line":434},25,[92,436,437],{"class":98},"        throw",[92,439,440],{"class":98}," new",[92,442,443],{"class":235}," ArgumentNullException",[92,445,350],{"class":106},[92,447,449],{"class":448},"sciFF","\"",[92,451,453],{"class":452},"sJQOs","context",[92,455,449],{"class":448},[92,457,458],{"class":106},");\n",[92,460,462],{"class":94,"line":461},26,[92,463,194],{"emptyLinePlaceholder":193},[92,465,467,470,473,476,479,482,484,487],{"class":94,"line":466},27,[92,468,469],{"class":254},"      var",[92,471,472],{"class":106}," response ",[92,474,475],{"class":221},"=",[92,477,478],{"class":106}," context.",[92,480,481],{"class":372},"HttpContext",[92,483,117],{"class":106},[92,485,486],{"class":372},"Response",[92,488,107],{"class":106},[92,490,492,495,498,500,503,506,508,511,514,517,520,523,526,529,531],{"class":94,"line":491},28,[92,493,494],{"class":106},"      response.",[92,496,497],{"class":372},"ContentType",[92,499,376],{"class":221},[92,501,502],{"class":221}," !",[92,504,505],{"class":254},"string",[92,507,117],{"class":106},[92,509,510],{"class":347},"IsNullOrEmpty",[92,512,513],{"class":106},"(ContentType) ",[92,515,516],{"class":221},"?",[92,518,519],{"class":106}," ContentType ",[92,521,522],{"class":221},":",[92,524,525],{"class":448}," \"",[92,527,528],{"class":452},"application\u002Frss+xml",[92,530,449],{"class":448},[92,532,107],{"class":106},[92,534,536],{"class":94,"line":535},29,[92,537,194],{"emptyLinePlaceholder":193},[92,539,541,543,546,549,551],{"class":94,"line":540},30,[92,542,418],{"class":98},[92,544,545],{"class":106}," (ContentEncoding ",[92,547,548],{"class":221},"!=",[92,550,428],{"class":427},[92,552,431],{"class":106},[92,554,556,559,562,564],{"class":94,"line":555},31,[92,557,558],{"class":106},"        response.",[92,560,561],{"class":372},"ContentEncoding",[92,563,376],{"class":221},[92,565,566],{"class":106}," ContentEncoding;\n",[92,568,570],{"class":94,"line":569},32,[92,571,194],{"emptyLinePlaceholder":193},[92,573,575,577,580,582,584],{"class":94,"line":574},33,[92,576,418],{"class":98},[92,578,579],{"class":106}," (feed ",[92,581,548],{"class":221},[92,583,428],{"class":427},[92,585,360],{"class":106},[92,587,589,592,595,598,601,603,605,608,611,614],{"class":94,"line":588},34,[92,590,591],{"class":98},"        using",[92,593,594],{"class":106}," (",[92,596,597],{"class":254},"var",[92,599,600],{"class":106}," xmlWriter ",[92,602,475],{"class":221},[92,604,440],{"class":98},[92,606,607],{"class":235}," XmlTextWriter",[92,609,610],{"class":106},"(response.",[92,612,613],{"class":372},"Output",[92,615,616],{"class":106},")) {\n",[92,618,620,623,626,628,631,634],{"class":94,"line":619},35,[92,621,622],{"class":106},"          xmlWriter.",[92,624,625],{"class":372},"Formatting",[92,627,376],{"class":221},[92,629,630],{"class":106}," Formatting.",[92,632,633],{"class":372},"Indented",[92,635,107],{"class":106},[92,637,639,642,645],{"class":94,"line":638},36,[92,640,641],{"class":106},"          feed.",[92,643,644],{"class":347},"WriteTo",[92,646,647],{"class":106},"(xmlWriter);\n",[92,649,651],{"class":94,"line":650},37,[92,652,653],{"class":106},"        }\n",[92,655,657],{"class":94,"line":656},38,[92,658,659],{"class":106},"      }\n",[92,661,663],{"class":94,"line":662},39,[92,664,334],{"class":106},[92,666,668],{"class":94,"line":667},40,[92,669,670],{"class":106},"  }\n",[92,672,674],{"class":94,"line":673},41,[92,675,676],{"class":106},"}\n",[10,678,679,680,683,684,687,688,691,692,695],{},"In a controller that supplies RSS feed simply project your data onto ",[64,681,682],{},"SyndicationItem","s and create a ",[64,685,686],{},"SyndicationFeed"," then return a ",[64,689,690],{},"FeedResult"," with the ",[64,693,694],{},"FeedFormatter"," of your choice.",[83,697,699],{"className":85,"code":698,"language":87,"meta":88,"style":88},"public ActionResult NewPosts() {\n  var blog = data.Blogs.SingleOrDefault();\n  var postItems = data.Posts.Where(p => p.Blog = blog)\n    .OrderBy(p => p.PublishedDate)\n    .Take(25)\n    .Select(p => new SyndicationItem(p.Title, p.Content, new Uri(p.Url)));\n\n  var feed = new SyndicationFeed(blog.Title, blog.Description, new Uri(blog.Url) , postItems) {\n    Copyright = blog.Copyright,\n    Language = \"en-US\"\n  };\n\n  return new FeedResult(new Rss20FeedFormatter(feed));\n}\n",[64,700,701,715,739,776,797,811,858,862,900,916,931,936,940,959],{"__ignoreMap":88},[92,702,703,706,709,712],{"class":94,"line":95},[92,704,705],{"class":221},"public",[92,707,708],{"class":235}," ActionResult",[92,710,711],{"class":347}," NewPosts",[92,713,714],{"class":106},"() {\n",[92,716,717,720,723,725,728,731,733,736],{"class":94,"line":110},[92,718,719],{"class":254},"  var",[92,721,722],{"class":106}," blog ",[92,724,475],{"class":221},[92,726,727],{"class":106}," data.",[92,729,730],{"class":372},"Blogs",[92,732,117],{"class":106},[92,734,735],{"class":347},"SingleOrDefault",[92,737,738],{"class":106},"();\n",[92,740,741,743,746,748,750,753,755,758,760,762,765,768,771,773],{"class":94,"line":130},[92,742,719],{"class":254},[92,744,745],{"class":106}," postItems ",[92,747,475],{"class":221},[92,749,727],{"class":106},[92,751,752],{"class":372},"Posts",[92,754,117],{"class":106},[92,756,757],{"class":347},"Where",[92,759,350],{"class":106},[92,761,10],{"class":356},[92,763,764],{"class":221}," =>",[92,766,767],{"class":106}," p.",[92,769,770],{"class":372},"Blog",[92,772,376],{"class":221},[92,774,775],{"class":106}," blog)\n",[92,777,778,781,784,786,788,790,792,795],{"class":94,"line":144},[92,779,780],{"class":106},"    .",[92,782,783],{"class":347},"OrderBy",[92,785,350],{"class":106},[92,787,10],{"class":356},[92,789,764],{"class":221},[92,791,767],{"class":106},[92,793,794],{"class":372},"PublishedDate",[92,796,431],{"class":106},[92,798,799,801,804,806,809],{"class":94,"line":158},[92,800,780],{"class":106},[92,802,803],{"class":347},"Take",[92,805,350],{"class":106},[92,807,808],{"class":427},"25",[92,810,431],{"class":106},[92,812,813,815,818,820,822,824,826,829,832,835,838,841,844,847,850,852,855],{"class":94,"line":176},[92,814,780],{"class":106},[92,816,817],{"class":347},"Select",[92,819,350],{"class":106},[92,821,10],{"class":356},[92,823,764],{"class":221},[92,825,440],{"class":98},[92,827,828],{"class":235}," SyndicationItem",[92,830,831],{"class":106},"(p.",[92,833,834],{"class":372},"Title",[92,836,837],{"class":106},", p.",[92,839,840],{"class":372},"Content",[92,842,843],{"class":106},", ",[92,845,846],{"class":98},"new",[92,848,849],{"class":235}," Uri",[92,851,831],{"class":106},[92,853,854],{"class":372},"Url",[92,856,857],{"class":106},")));\n",[92,859,860],{"class":94,"line":190},[92,861,194],{"emptyLinePlaceholder":193},[92,863,864,866,869,871,873,876,879,881,884,887,889,891,893,895,897],{"class":94,"line":197},[92,865,719],{"class":254},[92,867,868],{"class":106}," feed ",[92,870,475],{"class":221},[92,872,440],{"class":98},[92,874,875],{"class":235}," SyndicationFeed",[92,877,878],{"class":106},"(blog.",[92,880,834],{"class":372},[92,882,883],{"class":106},", blog.",[92,885,886],{"class":372},"Description",[92,888,843],{"class":106},[92,890,846],{"class":98},[92,892,849],{"class":235},[92,894,878],{"class":106},[92,896,854],{"class":372},[92,898,899],{"class":106},") , postItems) {\n",[92,901,902,905,907,910,913],{"class":94,"line":212},[92,903,904],{"class":106},"    Copyright ",[92,906,475],{"class":221},[92,908,909],{"class":106}," blog.",[92,911,912],{"class":372},"Copyright",[92,914,915],{"class":106},",\n",[92,917,918,921,923,925,928],{"class":94,"line":218},[92,919,920],{"class":106},"    Language ",[92,922,475],{"class":221},[92,924,525],{"class":448},[92,926,927],{"class":452},"en-US",[92,929,930],{"class":448},"\"\n",[92,932,933],{"class":94,"line":242},[92,934,935],{"class":106},"  };\n",[92,937,938],{"class":94,"line":267},[92,939,194],{"emptyLinePlaceholder":193},[92,941,942,945,947,949,951,953,956],{"class":94,"line":286},[92,943,944],{"class":98},"  return",[92,946,440],{"class":98},[92,948,229],{"class":235},[92,950,350],{"class":106},[92,952,846],{"class":98},[92,954,955],{"class":235}," Rss20FeedFormatter",[92,957,958],{"class":106},"(feed));\n",[92,960,961],{"class":94,"line":291},[92,962,676],{"class":106},[10,964,965],{},"This also has a few additional advantages:",[967,968,969,977,984],"ol",{},[26,970,971,972,974,975],{},"Unit tests can ensure the ",[64,973,236],{}," is a ",[64,976,690],{},[26,978,979,980,983],{},"Unit tests can examine the ",[64,981,982],{},"Feed"," property to examine results without parsing XML",[26,985,986,987,989,990],{},"Switching to Atom format involved just changing the new ",[64,988,74],{}," to ",[64,991,77],{},[10,993,994],{},[29,995,996],{},"[)amien",[998,999,1000],"style",{},"html pre.shiki code .smiwp, html code.shiki .smiwp{--shiki-default:#F85552;--shiki-dark:#FF79C6}html pre.shiki code .sjYfO, html code.shiki .sjYfO{--shiki-default:#DF69BA;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html pre.shiki code .s6Vpi, html code.shiki .s6Vpi{--shiki-default:#5C6A72;--shiki-dark:#F8F8F2}html pre.shiki code .s6f1k, html code.shiki .s6f1k{--shiki-default:#35A77C;--shiki-dark:#FF79C6}html pre.shiki code .s9HRq, html code.shiki .s9HRq{--shiki-default:#F57D26;--shiki-dark:#FF79C6}html pre.shiki code .sPLAf, html code.shiki .sPLAf{--shiki-default:#3A94C5;--shiki-dark:#8BE9FD}html pre.shiki code .snuxY, html code.shiki .snuxY{--shiki-default:#3A94C5;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html pre.shiki code .sXAHl, html code.shiki .sXAHl{--shiki-default:#3A94C5;--shiki-dark:#FF79C6}html pre.shiki code .sS4Kt, html code.shiki .sS4Kt{--shiki-default:#8DA101;--shiki-dark:#50FA7B}html pre.shiki code .s7cAX, html code.shiki .s7cAX{--shiki-default:#5C6A72;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .sKO3f, html code.shiki .sKO3f{--shiki-default:#DF69BA;--shiki-default-font-style:inherit;--shiki-dark:#BD93F9;--shiki-dark-font-style:italic}html pre.shiki code .sSKRk, html code.shiki .sSKRk{--shiki-default:#35A77C;--shiki-dark:#F8F8F2}html pre.shiki code .s3Ipq, html code.shiki .s3Ipq{--shiki-default:#DF69BA;--shiki-dark:#BD93F9}html pre.shiki code .sciFF, html code.shiki .sciFF{--shiki-default:#8DA101;--shiki-dark:#E9F284}html pre.shiki code .sJQOs, html code.shiki .sJQOs{--shiki-default:#8DA101;--shiki-dark:#F1FA8C}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":88,"searchDepth":110,"depth":110,"links":1002},[],"Development","2010-04-26T08:45:48+00:00","[object Object]","md",null,false,{},"\u002Fblog\u002F2010\u002Fcreating-rss-feeds-in-asp-net-mvc",{"title":5,"description":12},"blog\u002F2010\u002Fcreating-rss-feeds-in-asp-net-mvc",[1014,1015,1016],".NET","ASP.NET","RSS","\u002Fblog\u002F2010\u002Fcreating-rss-feeds-in-asp-net-mvc\u002F",710,"JAiwyyIYJFqJog_ppXq8aPZQ-FBqHAvwgWn2c1ffblo",[1021,1025,1029],{"title":1022,"date":1023,"url":1024},"Transactions in the MongoDB EF Core Provider","2025-10-25","\u002Fblog\u002F2025\u002Fmongodb-explicit-transactions\u002F",{"title":1026,"date":1027,"url":1028},"Queryable Encryption with the MongoDB EF Core Provider","2025-09-22","\u002Fblog\u002F2025\u002Fmongodb-queryable-encryption\u002F",{"title":1030,"date":1031,"url":1032},"Lazy Loading with EF Core Proxies","2025-04-02","\u002Fblog\u002F2025\u002Fef-proxies\u002F",[],1780900527199]