Skip to content

An extension for using JSON fields in EF Core without configuring Fluent API

License

Notifications You must be signed in to change notification settings

maxchistt/JsonProperty.EFCore

Repository files navigation

JsonProperty.EFCore

Version

About

This project allows you to use JSON fields in EF Core without setting up Fluent API

Id Name Price Params
1 Phone 500 {"Camera":13.5,"OS":"Android 11","Screen":"1080x900","Storage":32}
2 Car 100000 {"MaxSpeed":300,"Engine capacity":6,"ElectroCar":false}
3 Bag 400 {"Voliume":5,"Color":"Red"}

Instruction

Here are few steps how to use JsonProperty.EFCore project:

  1. Connect the project and specify 'using'

    using JsonProperty.EFCore;
  2. Create entity model

    public class Product
    {
        [Key, Required]
        public int Id { get; set; }
        public string? Name { get; set; }
        public decimal? Price { get; set; }
    }

    Or

    public class Note
    {
        [Key, Required]
        public int Id { get; set; }
        public string? Header { get; set; }
    }
  3. Create a JSON collection item class if necessary

    public class TodoItem
    {
        public string? Text { get; set; }
        public bool? CompleteStatus { get; set; }
    }
  4. Add JSON field property of type JsonEnumerable, JsonList, JsonDictionary or JsonItem to your entity model

    You can use the basic type like JsonEnumerable or JsonDictionary which uses elements of type object

    public class Product
    {
        [Key, Required]
        public int Id { get; set; }
        public string? Name { get; set; }
        public decimal? Price { get; set; }
    
        public JsonDictionary Parameters { get; set; } = new();
    }

    Or add property of generic type like JsonEnumerable<T> or JsonDictionary<TKey, TValue> with custom element type

    public class Note
    {
        [Key, Required]
        public int Id { get; set; }
        public string? Header { get; set; }
    
        public JsonEnumerable<TodoItem> Todos { get; set; } = new();
    }
  5. Usage example:

    Here is example for JsonDictionary

    Product product = new() {Name="Phone",Price=500.95m,Amount=21,Parameters={
        VirtualDictionary = new Dictionary<string,object>() {
            {"Camera",13.5 },{"OS","Android" },{"Screen","1080x900"},{"Storage",32}
        }
    }};
    db.Goods.Add(product);
    db.SaveChanges();

    This will generate the following JSON data into the corresponding table string field:

    { "Camera": 13.5, "OS": "Android", "Screen": "1080x900", "Storage": 32 }
    

    Or next if JsonSettings.StrictTypeSerialization is 'true' (default)

    {
      "Camera": [13.5, "System.Double"],
      "OS": ["Android", "System.String"],
      "Screen": ["1080x900", "System.String"],
      "Storage": [32, "System.Int32"]
    }

    And here is example for JsonEnumerable<T>

    Note note = db.Notes.FirstOrDefault();
    note.Todos.Edit(en => en.Append(new("MyTodoItemTitle")));

    And here is also the result in JSON:

    [ ... , { "Text": "MyTodoItemTitle", "CompleteStatus": false }]
    

    Or

    [
      {
        "Text": ["MyTodoItemTitle", "System.String"],
        "CompleteStatus": [false, "System.Boolean"]
      }
    ]

You can see more at wiki

Show your support

⭐️ this repository if this package helped you!