Reshiru.Blazor.IndexedDB.Framework
1.0.1
Install-Package Reshiru.Blazor.IndexedDB.Framework -Version 1.0.1
dotnet add package Reshiru.Blazor.IndexedDB.Framework --version 1.0.1
<PackageReference Include="Reshiru.Blazor.IndexedDB.Framework" Version="1.0.1" />
paket add Reshiru.Blazor.IndexedDB.Framework --version 1.0.1
#r "nuget: Reshiru.Blazor.IndexedDB.Framework, 1.0.1"
// Install Reshiru.Blazor.IndexedDB.Framework as a Cake Addin
#addin nuget:?package=Reshiru.Blazor.IndexedDB.Framework&version=1.0.1
// Install Reshiru.Blazor.IndexedDB.Framework as a Cake Tool
#tool nuget:?package=Reshiru.Blazor.IndexedDB.Framework&version=1.0.1
<img src="https://github.com/Reshiru/Blazor.IndexedDB.Framework/blob/master/logo.svg" height="28px"> Blazor.IndexedDB.Framework
An easy way to interact with IndexedDB and make it feel like EFCore but async.
NuGet installation
PM> Install-Package Reshiru.Blazor.IndexedDB.Framework
Current features
- Connect and create database
- Add record
- Remove record
- Edit record
Planned features or optimizations
- FK implementation
- Optimize change tracker (currently using snapshotting mechanism based using hashes)
- Remove PK dependencies from IndexedSet
- Versioning (eg. merging database)?
How to use
- In your startup.cs file add
services.AddSingleton<IIndexedDbFactory, IndexedDbFactory>();
IIndexedDbFactory is used to create your database connection and will create the database instance for you. IndexedDbFactory requires an instance IJSRuntime, should normally already be registered.
- Create any code first database model you'd like to create and inherit from IndexedDb. (Only properties with the type IndexedSet<> will be used, any other properties are beeing ignored)
public class ExampleDb : IndexedDb
{
public ExampleDb(IJSRuntime jSRuntime, string name, int version) : base(jSRuntime, name, version) { }
public IndexedSet<Person> People { get; set; }
}
- Your model (eg. person) should contain an Id property or a property marked with the key attribute.
[System.ComponentModel.DataAnnotations.Key]
- Example
public class Person
{
[Key]
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
- Now you can start using your database. (Usage in razor via inject: @inject IIndexedDbFactory DbFactory)
Adding records
using (var db = await this.DbFactory.Create<ExampleDb>())
{
db.People.Add(new Person()
{
FirstName = "First",
LastName = "Last"
});
await db.SaveChanges();
}
Removing records
Note: To remove an element it is faster to use a already created reference. You should be able to also remove an object only by it's id but you have to use the .Remove(object) method (eg. .Remove(new object() { Id = 1 }))
using (var db = await this.DbFactory.Create<ExampleDb>())
{
var firstPerson = db.People.First();
db.People.Remove(firstPerson);
await db.SaveChanges();
}
Modifying records
using (var db = await this.DbFactory.Create<ExampleDb>())
{
var personWithId1 = db.People.Single(x => x.Id == 1);
personWithId1.FirstName = "This is 100% a first name";
await db.SaveChanges();
}
License
Licensed under the MIT license.
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows |
.NET Core | netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard2.0 netstandard2.1 |
.NET Framework | net461 net462 net463 net47 net471 net472 net48 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
-
.NETStandard 2.0
- Microsoft.AspNetCore.Components.Browser (>= 3.0.0-preview6.19307.2)
- TG.Blazor.IndexedDB (>= 0.9.0-beta)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Reshiru.Blazor.IndexedDB.Framework:
Repository | Stars |
---|---|
ArduPilot/MissionPlanner
Mission Planner Ground Control Station (c# .net)
|