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"} |
Here are few steps how to use JsonProperty.EFCore project:
-
Connect the project and specify 'using'
using JsonProperty.EFCore;
-
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; } }
-
Create a JSON collection item class if necessary
public class TodoItem { public string? Text { get; set; } public bool? CompleteStatus { get; set; } }
-
Add JSON field property of type
JsonEnumerable
,JsonList
,JsonDictionary
orJsonItem
to your entity modelYou can use the basic type like
JsonEnumerable
orJsonDictionary
which uses elements of type objectpublic 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>
orJsonDictionary<TKey, TValue>
with custom element typepublic class Note { [Key, Required] public int Id { get; set; } public string? Header { get; set; } public JsonEnumerable<TodoItem> Todos { get; set; } = new(); }
-
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
⭐️ this repository if this package helped you!