DrUalcman-BlazorIndexedDb 1.4.13

There is a newer version of this package available.
See the version list below for details.
dotnet add package DrUalcman-BlazorIndexedDb --version 1.4.13                
NuGet\Install-Package DrUalcman-BlazorIndexedDb -Version 1.4.13                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DrUalcman-BlazorIndexedDb" Version="1.4.13" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DrUalcman-BlazorIndexedDb --version 1.4.13                
#r "nuget: DrUalcman-BlazorIndexedDb, 1.4.13"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DrUalcman-BlazorIndexedDb as a Cake Addin
#addin nuget:?package=DrUalcman-BlazorIndexedDb&version=1.4.13

// Install DrUalcman-BlazorIndexedDb as a Cake Tool
#tool nuget:?package=DrUalcman-BlazorIndexedDb&version=1.4.13                

BlazorIndexedDb

Manage indexedDb from c# with Blazor. Simple way to interact with IndexedDB similar how you can do with EntityFramework

New version changes coming

Working in a new version with StoreContext and StoreSet to easy manage and work from C#. New version 1.4.14. Last stable version 1.4.13. Add references between tables. Update multiple tables same time, and more...

Current features

Create StoreContext. StoreSet per each model you need into a database. Set PrimaKey in the model. CURD from StoreSet Select all or one by PrimaryKey from StoreSet

How to use

BlazorIndexedDb requires an instance IJSRuntime, should normally already be registered.

Create any code first database model you'd like to create and inherit from IndexedDb. You must be use the attribute FieldAttribute to setup the properties.

Your model (eg. PlayList) should contain an Id property or a property marked with the key attribute.

    public class PlayList
    {
        [FieldAttribute(IsKeyPath = true, IsAutoIncemental = false, IsUnique = true)]
        public string Id { get; set; }
        public string Url { get; set; }
        public string Title { get; set; }
        public string Ownner { get; set; }
    }

namespace

BlazorIndexedDb
BlazorIndexedDb.Attributes
BlazorIndexedDb.Commands
BlazorIndexedDb.Models
BlazorIndexedDb.Store

Then can create a DBContext class to manage the database like in EF using a constructor with IJSRuntime and properties with the server about how to manage your tables.

public class DBContext
    {
        #region properties
        public StoreSet<PlayList> PlaysList { get; set; }
        #endregion

        #region constructor
        public DBContext(IJSRuntime js)
        {
            Settings.EnableDebug = true;
            Settings settings = new Settings("PlaysListDb");
            settings.AssemblyName = "PlaysList.Shared";
            Init(settings);
        }
        #endregion

        #region helpers
        public void ProcessErrors(List<ResponseJsDb> result)
        {
            string errors = string.Empty;
            foreach (ResponseJsDb error in result)
            {
                errors += error.Message + "<br/>";
            }
            Console.WriteLine(errors);
        }
        #endregion
    }

In Program.cs add the service for the DBContext

public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("#app");
            builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
            //INJECT ALWAYS AS SINGLETON
            builder.Services.AddSingleton<DBContext>();

            await builder.Build().RunAsync();
        }
    }

In the Index.html or the file are you using to start the app add

    <script src="_content/DrUalcman-BlazorIndexedDb/jsDB.js"></script>
    <script src="_content/DrUalcman-BlazorIndexedDb/MyDbJs.js"></script>

In the component need to use a IndexDb inject DBContext

        [Inject]
        public DBContext _DBContext { get; set; }

You can modify the model classes any time, but if the model you will pass don't match with the model created when create the IndexDb this will return a exception.

IJSRuntime Db extensions

  1. SingleRecord<TModel>
  2. DbSelect<TModel>
  3. DbInsert<TModel>
  4. DbUpdate<TModel>
  5. DbDelete<TModel>

Working with records from IJSRuntime Db extensions

In all the select action you will receive the List<TModel> except if you are looking for one Key Id send, then you will receive the Model object. In all actions you will receive a ResponseJsDb model or a List<ResponseJsDb> with all the responses, if you are sending a lot of rows.

    public class ResponseJsDb
    {
        public bool Result { get; set; }
        public string Message { get; set; }
    }

Working with records from StoreSet

The store set always return the model or list of the model for all select actions and CommandResponse record for the comands actions

 public record CommandResponse(bool Result, string Message, List<ResponseJsDb> Response);

More info

Check <a href="https://blazorindexdb.community-mall.com/">our web</a> to get more info.

Dependencies

<a href="https://github.com/drualcman/jsDB">jsDB</a>

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.8.47 120 10/10/2024
1.7.46 182 9/5/2024
1.6.45 108 9/4/2024
1.6.44 111 8/30/2024
1.6.43 137 8/17/2024
1.6.42 93 8/7/2024
1.6.41 265 6/22/2024
1.6.40 281 4/16/2024
1.6.39 216 3/26/2024
1.6.38 238 2/28/2024
1.6.37 179 2/27/2024
1.6.36 224 2/27/2024 1.6.36 is deprecated because it has critical bugs.
1.6.35 237 2/18/2024
1.6.34 646 10/10/2023
1.6.33 387 8/18/2023
1.6.32 785 3/23/2023
1.6.31 809 1/28/2023
1.6.30 889 8/10/2022
1.6.28 845 5/25/2022
1.6.27 855 4/3/2022
1.6.26 798 4/3/2022
1.6.25 769 4/3/2022
1.5.24 621 12/28/2021
1.5.23 555 12/27/2021
1.5.22 598 12/19/2021
1.5.21 665 11/15/2021
1.5.20 737 11/14/2021
1.5.19 774 10/25/2021
1.5.18 680 10/24/2021
1.5.17 721 8/29/2021
1.4.16 671 8/9/2021
1.4.15 693 8/8/2021
1.4.14 657 8/3/2021
1.4.13 795 7/12/2021
1.3.11 743 5/8/2021
1.3.10 697 5/2/2021

Add Settings to prepare more easy the DB
Add StoreContext represents a DB for can be inexted with a singleton from the build when start the application
Add StoreSet represent tables and have the basics CURD and select actions.
Change object name IndexDb to FieldAttribute