https://github.com/edgedb/edgedb.com/blob/2bd7c4bf9165135577f56f94533df084063e9914/content/blog/2022-10-17-dotnet-announcement/post.rst

  • “Dotnet” (ecosystem) vs. “.NET” (driver) vs. “.Net” (name of binding) vs. “dotnet” (value types)
  • Link “Other bindings” to /docs/clients/index
  • Style guide?
    • Do we have one? Should we have one?
    • behavior vs. behaviour?

… developer experience as our highest priorities - EdgeDB.Net achieves by using a fully asynchronous …

  • Should be em dash

EdgeDB.Net targets .NET 6. Versions below may not work or bring unexpected behavior.

  • “With earlier versions of .NET, the driver may not work as expected or at all.”

In order to use our EdgeDB.Net driver, you will need EdgeDB. For the intent of this demonstration, you can follow through our Quickstart guide for the full process on installing and creating a new project.

  • “For the intent of this demonstration…” Follow our Quickstart guide for help installing EdgeDB and creating a new project.

Make sure that you create the project in your .sln directory, this is so EdgeDB.Net can automatically find and use the project.

  • Split into two complete sentences

Once you setup EdgeDB, install the new driver with dotnet in your command terminal:

  • “setup” “set up”
  • “EdgeDBClient” should be relative link

This class acts as an in-between for your code and EdgeDB.

  • “in-between” sounds awkward. “Connective layer” maybe?

Queries exist with different cardinalities, depending on how you make your query, you may find yourself needing different return results.

  • Split into two sentences at “cardinalities. Depending”

depending on how you make your query, you may find yourself needing different return results.

  • Make this more concrete. What do you mean? Is this just about cardinality or about something else as well?
  • Explain “cardinalities”
    • “Queries exist with different cardinalities (i.e., the expected number of results — at least one, at most one, or many).”

EdgeDB.Net uses the common dotnet value types to represent different scalar types in edgedb.

  • edgedb EdgeDB

EdgeDB.Net supports strong-typed results

  • strong-typed strongly-typed

Let’s use the classic “Movies” schema which can be found here.

  • Drop “which can be found here” and link "Movies" schema

Let’s first create the dotnet types which will represent the types defined in the schema, one of the huge features the dotnet driver offers is reflected polymorphism between your code and EdgeDB.

  • Split sentences at “in the schema. One of the huge features…”

Abstract types defined in your schema can be models by abstract types in dotnet, you can then pass this abstract type as a query result and the driver will automaticallly deserialize the correct inheriting type.

  • Should “can be models by” be “can be modeled by”?
  • Split sentence at “abstract types in dotnet. You can then pass…”
  • too many Ls in “automatically”

This demo uses a naming strategy to use PascalCase in dotnet types, this behavior is opt-in. To learn more about naming strategies and how to enable it have a look at the Naming Strategy docs

  • “This demo uses a PascalCase naming strategy in dotnet types. This strategy is optional. To learn more about naming strategies and how to enable implicit conversion to your chosen strategy, refer to…”
  • End with a period

EdgeDB.Net will deserialize the query result as a Movie or Show depending on the typename of the result, finally boxing the type to Content allowing full polymorphism all the way down.

  • Needs rework
  • “EdgeDB.Net will deserialize the query result as a Movie or Show depending on the typename of the result. Querying with the Content abstract type allows for full polymorphism all the way down.”
  • ⭐ “By querying with the Content abstract type, EdgeDB.Net will return every Content object, whether it’s a Movie or a Show. Objects will be individually deserialized as one or the other depending on their typename.”

EdgeDB.Net supports transactions out of the box, retrying your query(s) if a retryable error (ex: network failure) is thrown.

  • query(s) queries
  • retryable retry-able
  • (ex: network failure) (e.g., network failure)

Code blocks in transactions may run multiple times, it’s good practice to only perform database-related operation in transactions.

  • Split sentences: “multiple times. It’s good practice…”

This is incredibly useful in tandem with Globals and Access Policies. Let’s use the demo on the access policy docs as an example:

  • These links don’t work for me.

So whats next for EdgeDB.Net?

  • So, what’s next for EdgeDB.Net?

We’re currently working on a query builder to provide an EFCore-like feel without that hastle of an ORM.

  • hastle hassle
  • that hassle the hassle
  • Should “hassle” be “drawbacks?”

The query builder is very early access and contains a lot of bugs, so beware!

  • “is very early and…” or “is a very early release and…”