npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

prisma-generator-entityframework

v1.4.0

Published

Create a C# .NET core EntityFramework ORM from your schema.prisma file

Downloads

36

Readme

Shout out to @YassinEldeeb for building the awesome bootstrap project create-prisma-generator. Without it, this would have taken significantly more time to get into a deployable state.

prisma-generator-entityframework

Prisma. It's great, but if you're from the .NET clan, you're left standing out in the rain. Maybe there's still a way? What if the prisma.schema file could generate an EntityFramework client?

Usage

Step One

In your schema.prisma file, add a new generator called entityframework (or whatever you like):

// + generator entityframework {
// +   provider        = "npx prisma-generator-entityframework"
// +   output          = "../types"
// +   namespace       = "MyNamespace"
// +   clientClassName = "DataDbContext"
// + }

datasource db {
  provider = "postgresql"
  url      = "postgresql://user:password@my_postgres_host.com:5432/initial_db"
}

// Here's some example model code
model User {
  id      Int       @id @default(autoincrement())
  email   String    @unique
  name    String?
  posts   Post[]
  comment Comment[]

  @@map("system_user")
}

...

Step Two

Run prisma generate or npx prisma generate on your schema.

The prisma-generator-entityframework declaration you added will generate a C# EntityFramework client interface based on the models you have declared in your schema file.

Step Three

In your C# project(s), you now should be able to do things like:

using MyNamespace;

...

var context = new DataDbContext(); // if you're new to EntityFramework, it will come preconfigured with smarts to call your db connection, no batteries required!
context.User.Add(new User {
  email = "[email protected]",
  name = "John Doe",
});
context.SaveChanges();

Console.WriteLine(context.User.Where(user => user.name == "John Doe").First().email);
// [email protected]

Configuration

Configuration is as simple as providing values for these four properties:

| Property | Type | Description | |-------------------|------------------------------------------|-------------| | provider | "npx prisma-generator-entityframework" | Tell prisma you want to use this generator. | output | string: relative or absolute path | Tell prisma where you want the source code to be dumped to. | namespace | string | Tell prisma-generator-entityframework what namespace to stick your client and model code in. | clientClassName | string | Tell prisma-generator-entityframework what to name your DbContext subclass.

Compatibility

.NET support

| Platform | Version | Support | |----------------|---------|----------------| | .NET core | 5.0+ | ✔️ | | .NET core | <5.0 | ❔ (unverified) | | .NET framework | * | ❌ |

Right now, the primary target is .NET core, version 5.0 and later. If ~~enough~~ any interest is communicated in suppporting .NET framework, it can certainly be prioritized.

Database support

| Prisma connector | Supported | .NET core provider mapping | |-------------------|-----------|--------------------------------------------------------------------------------------------------------------------| | postgres | ✔️ | Npgsql.EntityFrameworkCore.PostgreSQL | | mysql | ✔️ | Pomelo.EntityFrameworkCore.MySql | | sqlite | ✔️ | Microsoft.EntityFrameworkCore.Sqlite | | sqlserver | ✔️ | Microsoft.EntityFrameworkCore.SqlServer | | cockroachdb | ❌ | -* | | mongodb | ❌ | -

* It seems at least plausible to support CockroachDB, and given how compelling a product the CockroachLabs team have created, this should probably prioritized.

For more information on EntityFramework database provider support, visit the DbContext configuration guide.

For more information on Prisma-supported database connectors, visit the Prisma database connector documentation.

Feature support

The following table tracks feature availability. It's a good reference for verifying whether your schema will output with the information you need. Drop an issue if you'd like to see a specific feature prioritizied.

| Feature | Supported | Description |--------------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------- | model generation | ✔️ | The system can generate basic models. | client generation | ✔️ | The system can generate a basic client (DbContext in the EntityFramework world). | .env datasource | ✔️ | The system can optionally configure the client from a .env file using the env() expression | relation generation | ✔️ | The system can generate the code necessary to have object-to-object relations. | table/field mapping | ✔️ | The system can detect @map and @@map annotations, and apply them accordingly. | array-type field mapping | ✔️ | The system can detect whether a particular field is an array type. | @id mapping | ✔️ | The system can map a primary key. | multi-field @id mapping | ✔️ | The system can handle multi-field primary keys. | @default(uuid()) annotation mapping | ✔️ | The system can specify a limited set of default values for primary key types: integer && string uuid. | @db.UniqueIdentifier, @db.Uuid | ✔️ | The system can handle system-specific UUID (aka GUID) types. | @db* annotation mapping (postgres) | ✔️ | The system can tell EntityFramework that your postgres @db annotations correspond to important underlying type mappings. | Basic Json type mapping | ✔️ | The system can retrieve Json as a string type.* | Bytes type mapping | ✔️ | The system can handle the Bytes type as a byte[] | Unsupported type mapping | ❌ | " " " | @default annotation mapping | ❌ | The system cannot yet apply the full range of model annotations based on the @default field annotation. | @db* annotation mapping | ❌ | The system cannot yet apply the full range of model annotations based on the @db.* and @dbgenerated field annotations, beyond postgres. | property/class case formating | ❌ | The system cannot yet massage case conventions, ie camelCase to PascalCase. | @index annotation mapping | ❌ | " " " | @ignore annotation mapping | ❌ | " " " | cuid/autoincrement/now | ❌ | " " ". Note that uuid is implemented for primary keys. | nuget dependency detection | ❌ | The system cannot yet autodetect that a nuget dependency is necessary to support the declared db provider. | enums generation | ❌ | The system cannot yet derive enums. | schema model argument mapping | ❌ | The system cannot yet handle model argument mapping.

* In the future, support may be added for extracting structured types out of json & jsonb fields.

Additional Links