In our previous article, we covered what .NET is and the main features that drove .NET to be the framework of choice for millions of developers around the world, and how it allows them to create solid applications for any platform, from desktop and mobile to the web and cloud.
But the framework itself is only the tip of the iceberg when it comes to the .NET environment. Let’s take a dive into the complementary technologies and tools that make working with .NET so beneficial.
Table Of Contents
Language Integrated Query (LINQ) is one of the things that makes working with .NET a breeze. It was introduced in .NET Framework 3.5 back in 2007.
Integrating a querying language into any programming language is feasible through a set of constructs that provide powerful search capabilities within the programming language syntax. LINQ introduced new models for data manipulation. Such models can be extended to potentially query any type of data source.
This set of .NET technologies make it easier for developers to work with data, as it treats the queries as a first-class programming language construct. This allows us to model a database through classes and then search the database, as well as insert, update or delete data. LINQ supports transactions, views and stored procedures. It also provides an easy way to integrate data validation and business logic rules.
LINQ has a set of query operators which form the LINQ pattern to work with data. Calls to query methods can be chained together in one query, which enables queries to become arbitrarily complex.
By using LINQ, we get the following advantages:
Entity Framework (EF) is the Object Relational Mapping (ORM) technology developed by Microsoft that makes it easy to work with database data. It enables .NET developers to work with data using objects of domain-specific classes without focusing on the underlying database tables and columns where data is indeed stored. With EF, developers can work at a higher level of abstraction when processing data and can create and maintain data-oriented applications with less code compared to traditional applications.
EF and LINQ make a great couple. It’s really straightforward to compose database queries and EF has great support for LINQ operators that get translated to SQL code to be executed on the database server.
Entity Framework main features include:
Entity Framework supports many database flavors, these being the main ones:
For more, here’s a full list of compatible database providers.
IDEs: Visual Studio and Visual Studio Code
An IDE is an Integrated Development Environment. When it comes to .NET, the most common options are the full-fledged Visual Studio and the lighter Visual Studio Code.
Visual Studio (VS) is currently offered in 3 flavors:
Visual Studio has been around since 1997, shortly before .NET was first introduced. VS 2002 was the first version with support for .NET 1.0 and since then it has evolved a lot and has full support for .NET native programming languages. The current version, Visual Studio 2019, supports lots of features. Amongst them it’s worth mentioning the following ones:
Visual Studio Code or just VS Code on the other hand is a lightweight IDE and supports many of the features of its big brother. It was first released in 2015. It’s open-source and is used for cross-platform development. It has an active community that takes advantage of its extensibility points. Like VS, VS Code has an extension library that allows .NET developers to add languages, debuggers, and tools to support many different development workflows.
Visual Studio Code combines the simplicity of a source code editor with powerful developer tooling, like IntelliSense code completion and debugging. As the folks behind it say: “First and foremost, it is an editor that gets out of your way. The delightfully frictionless edit-build-debug cycle means less time fiddling with your environment, and more time executing on your ideas.”
It’s highly customizable to fit any developer’s needs.
Visual Studio Code main features include:
Package Manager (NuGet)
NuGet is the .NET package manager. The NuGet Gallery is the central package repository used by all package authors and consumers. Its client is open-source. NuGet’s main purpose is to make it easier to share, organize and keep track of libraries installed in a given .NET solution\project. It appeared in 2010 to solve a significant problem that developers always had: to share and reuse code (class libraries) across different solutions or projects.
With NuGet, there’s no need to store the libraries\packages’ source-code in Git anymore. Package metadata is stored in the project definition file (.csproj for C# for example). When a .NET developer clones the Git repository which contains a solution with many projects or even a standalone project and builds it for the first time, Visual Studio will automatically restore (download all the dependencies/NuGet packages, described in the .csproj) right from the NuGet package source or your own defined package source. This saves a lot of storage space on any Git repository, makes it faster to clone the repo, and guarantees that you’ll get the correct version for each library, preventing any version mismatch.
Figure 2 – as of July 2021, the NuGet Gallery has 267,413 packages available to download
Visual Studio has great UI integration to manage all the libraries supporting our solution’s projects.
Another way of managing NuGet packages is through NuGet’s CLI (command line interface). It allows us to execute package managing tasks to produce and consume packages, update, check package info, etc in a straightforward way.
Even Microsoft releases its libraries into smaller packages through NugGet like for example System.Net.Http.Json. This makes it easy for the developer to install just the necessary libraries for any given project. We can also choose which library version to install. There’s a version history table available for comparison.
Opening any given NuGet package by using the FuGet package explorer we can check .NET framework versions supported by that specific package version and the list of dependencies the package consumes. We can even navigate through the package source-code at will.
For a more detailed NuGet description, be sure to check out this page.
Developing for the Cloud (Azure)
With Microsoft Azure or just Azure, you can take advantage of .NET on the cloud; Azure is Microsoft’s take on the cloud. It was released back in October 2008.
Azure offers cloud computing services letting companies and developers build, test, deploy and manage applications and services through Microsoft-managed data centers. As we’d expect, it has full support for .NET and its related .NET technologies through service offerings such as SQL Database (Managed Cloud Database Service) and Active Directory (Azure AD).
In recent years we’ve seen a surge in moving things to be online and available 24/7 on the internet. Systems and their data are moved from on-premises to the cloud where they can be kept secure, backed up and replicated, being serviced by regionalized data-centers. This is effective in many ways, such as increase in performance, decreased data loss risk, better security enforcement and cost reduction, just to mention a few. The cloud takes away the burden of keeping web-servers and all infrastructure involved which deviates from our main purpose which is building and shipping software products.
For .NET developers, Azure is integrated in many workflows, including within Visual Studio. A C# .NET Web application can be deployed with the click of a button to any given app service, having it ready for consumption in a matter of seconds.
Azure has a free tier that allows the use of 25+ services forever and other popular services are free for 1 year. It does have a huge ecosystem. As of now, it offers 200+ services that can be consumed on-demand, that is, you pay just for what you need and use. This allows for greater flexibility. One can configure an application to only use the services and processing power that are needed at the moment. If the app’s audience grows and more power is demanded, it’s just a matter of bumping the current app’s capacity accordingly; likewise, if some degree of economy is necessary, scaling down is just as easy.
Azure DevOps is the icing on the cake for anyone developing with .NET. It’s a place where we can plan, code, collaborate, and ship applications. With the increasing number of developers working from home, it’s the perfect place to manage their work in a centralized place.
Any company or solo developer can create projects on DevOps. Projects are the root concept. Within a project, we have a set of highly customizable features to manage such a project like adding\removing users, creating groups of users, configuring specific user or group permissions, etc.
One of its great offerings is the ability to track product backlog items tightly integrated with Git workflows. For example, a team manager can create a group of developers and assign specific tasks to each one of them. Developers can then start working on their tasks, and when finished, submit a pull request targeting the work item at hand. Once this pull request is approved, the work item can be marked as ready or done automatically. There are many possible workflows to set up. You can make it fit any style of workflow.
Everything gets tracked within DevOps, allowing the developer or manager to check a feature’s progress step by step; line by line of code. DevOps main features include:
It’s important to mention that DevOps is available for any programming language and any platform, not only .NET. To get a glimpse of all this, you can watch this video from the Azure DevOps YouTube channel.
As we’ve seen, there are plenty of technologies and tools that boost .NET’s capabilities to the next level and enhance our developer experience during all of the stages of a software product. From incredibly easy database manipulation to smooth cloud deployment, powerful editors and the ability to further extend its powers with third-party tools, the .NET environment has a lot to offer.