tgstation-server  4.3.2
The /tg/station 13 server suite
DatabaseCollection.cs
Go to the documentation of this file.
1 using Microsoft.EntityFrameworkCore;
2 using System;
3 using System.Collections;
4 using System.Collections.Generic;
5 using System.Linq;
6 using System.Linq.Expressions;
7 using System.Threading;
8 
9 namespace Tgstation.Server.Host.Database
10 {
12  sealed class DatabaseCollection<TModel> : IDatabaseCollection<TModel> where TModel : class
13  {
17  readonly DbSet<TModel> dbSet;
18 
23  public DatabaseCollection(DbSet<TModel> dbSet)
24  {
25  this.dbSet = dbSet ?? throw new ArgumentNullException(nameof(dbSet));
26  }
27 
29  public IEnumerable<TModel> Local => dbSet.Local;
30 
32  public Type ElementType => dbSet.AsQueryable().ElementType;
33 
35  public Expression Expression => dbSet.AsQueryable().Expression;
36 
38  public IQueryProvider Provider => dbSet.AsQueryable().Provider;
39 
41  public void Add(TModel model) => dbSet.Add(model);
42 
44  public void AddRange(IEnumerable<TModel> models) => dbSet.AddRange(models);
45 
47  public void Attach(TModel model) => dbSet.Attach(model);
48 
50  public IAsyncEnumerator<TModel> GetAsyncEnumerator(CancellationToken cancellationToken = default) => dbSet.AsAsyncEnumerable().GetAsyncEnumerator();
51 
53  public IEnumerator<TModel> GetEnumerator() => dbSet.AsQueryable().GetEnumerator();
54 
56  public void Remove(TModel model) => dbSet.Remove(model);
57 
59  public void RemoveRange(IEnumerable<TModel> models) => dbSet.RemoveRange(models);
60 
62  IEnumerator IEnumerable.GetEnumerator() => dbSet.AsQueryable().GetEnumerator();
63  }
64 }
DatabaseCollection(DbSet< TModel > dbSet)
Initializes a new instance of the DatabaseCollection<TModel> .
readonly DbSet< TModel > dbSet
The backing DbSet<TEntity>.