Newer
Older
EfCoreQueryFilter / Order.cs
@Derek Comartin Derek Comartin on 22 Sep 2021 1 KB Init
using System;
using Microsoft.EntityFrameworkCore;

namespace MultiTenant
{
    public class Order
    {
        public Guid OrderId { get; set; }
        public Guid TenantId { get; set; }
    }

    public class OrderDbContext : DbContext
    {
        private readonly Token _token;

        public DbSet<Order> Orders { get; set; }

        public OrderDbContext(Token token)
        {
            _token = token;
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Order>().HasKey(x => x.OrderId);
            modelBuilder.Entity<Order>().HasQueryFilter(b => b.TenantId == _token.TenantId);
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseInMemoryDatabase("MultiTenant");
        }

        public delegate OrderDbContext TenantFactory(Token token);

        public static OrderDbContext Factory(Token token)
        {
            return new OrderDbContext(token);
        }

    }
}