Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dotnet core 2.2 EntityFramework with postgres

I followed the documentation on Postgres C# website.

When I run this code I get:

The entity type 'Bar' requires a primary key to be defined.

POCOs:

public class Foo
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    [Column(TypeName = "jsonb")]
    public Bar Bar { get; set; }
}

public class Bar
{
    public string Prop1 { get; set; }

    public string Prop2 { get; set; }
}

My goal is to avoid using string as a property type of Bar and let the entity framework handle JSON serialize, deserialize. I don't want the Bar to be a separate table. I want it to be a JSON column on Foo.

like image 856
Node.JS Avatar asked Sep 06 '25 22:09

Node.JS


1 Answers

You need to create ValueConverter<Bar, string> or use function expressions directly in HasConversion in on OnModelCreating.

Example:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Foo>()
        .Property(x => x.Bar)
        .HasConversion(
        v => JsonConvert.SerializeObject(v),
        v => JsonConvert.DeserializeObject<Bar>(v));                

    base.OnModelCreating(modelBuilder);
}

Reference: https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions

like image 170
pavinan Avatar answered Sep 08 '25 12:09

pavinan