An easy way to interact with IndexedDB and make it feel like EF Core but async.
- 1.1.1:
- Upgraded from
.NET Core 3.0.0-previewto.NET Core 3.2.1 - Upgraded form
netstandard2.0tonetstandard2.1 - Upgraded form
C# 7.3toC# 8.0 - Upgraded
TG.Blazor.IndexedDBfrom0.9.0-betato1.5.0-preview - Changed
namespace Blazor.IndexedDB.Frameworktonamespace IndexedDB.Blazor - Changed
private IndexedDBManager connector;toprotected IndexedDBManager connector;inIndexedDb - Changed
IndexedSet<T> : IEnumerable<T>toIndexedSet<T> : ICollection<T>
- Upgraded from
- 1.0.1:
- Original code by Reshiru
- Original repository at Blazor.IndexedDB.Framework
The NuGet package is at: https://www.nuget.org/packages/IndexedDB.Blazor
Either install it from command line:
PM> Install-Package IndexedDB.BlazorOr include it in your project file:
<PackageReference Include="IndexedDB.Blazor" Version="1.1.1" />
- Connect and create database
- Add record
- Remove record
- Edit record
- Add
TG.Blazor.IndexedDB/indexedDb.Blazor.jsto yourindex.html
<script src="_content/TG.Blazor.IndexedDB/indexedDb.Blazor.js"></script>- Register
IndexedDbFactoryas a service.
services.AddSingleton<IIndexedDbFactory, IndexedDbFactory>();-
IIndexedDbFactoryis used to create the database connection and will create the database instance for you. -
IndexedDbFactoryrequires an instance ofIJSRuntimewhich should normally already be registered.
- Create any code first database model and inherit from
IndexedDb. Only properties with the typeIndexedSet<>will be used, any other properties will be 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 anIdproperty or a property marked with theKeyattribute.
public class Person
{
[System.ComponentModel.DataAnnotations.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
using (var db = await this.DbFactory.Create<ExampleDb>())
{
db.People.Add(new Person()
{
FirstName = "First",
LastName = "Last"
});
await db.SaveChanges();
}To remove an element it is faster to use an already created reference. You should also be able to 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();
}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();
}Original license.
Licensed under the MIT license.