Files
OpenWarehouse/OpenWarehouse.warehouse.api/Data/ApplicationDbContext.cs
T
2025-02-26 23:42:19 +01:00

94 lines
3.9 KiB
C#

using System.Runtime.InteropServices.ComTypes;
using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore;
namespace OpenWarehouse.warehouse.api.Data;
public class ApplicationDbContext: DbContext, IDataProtectionKeyContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var itemInWarehouseClaims = modelBuilder.Entity<ItemInWarehouseClaims>();
itemInWarehouseClaims.HasOne(e => e.Item)
.WithMany(e => e.ItemInWarehouseClaims)
.HasForeignKey(e => e.ItemId);
itemInWarehouseClaims.HasIndex(ic => new { ic.ItemId, ic.ClaimType })
.IsUnique();
var wrehouseClaims = modelBuilder.Entity<WarehouseClaims>();
wrehouseClaims.HasOne(e => e.Warehouse)
.WithMany(e => e.Claims)
.HasForeignKey(e => e.WarehouseId);
wrehouseClaims.HasIndex(ic => new { ic.WarehouseId, ic.ClaimType })
.IsUnique();
var itemClaims = modelBuilder.Entity<ItemClaims>();
itemClaims.HasIndex(ic => new { ic.ItemId, ic.ClaimType })
.IsUnique();
itemClaims.HasOne(ic => ic.Item)
.WithMany(i => i.ItemClaims)
.HasForeignKey(ic => ic.ItemId);
var itemTag = modelBuilder.Entity<ItemCategoryTag>();
itemTag.HasOne(e => e.ParentTag)
.WithMany(e => e.ListOfChildrenTag)
.HasForeignKey(e => e.ParentTagId);
itemTag.HasIndex(ic => new { ic.Name })
.IsUnique();
var item = modelBuilder.Entity<Item>();
item.HasOne(e => e.Producer)
.WithMany(e => e.Items)
.HasForeignKey(e => e.ProducerId)
.IsRequired(true);
item.HasIndex(ic => new { ic.Name, ic.ProducerId })
.IsUnique();
item.Navigation(ic => ic.ItemClaims)
.UsePropertyAccessMode(PropertyAccessMode.Property);
var producers = modelBuilder.Entity<Producers>();
producers.HasIndex(ic => new { ic.Name })
.IsUnique();
producers.Navigation(ic => ic.Claims)
.UsePropertyAccessMode(PropertyAccessMode.Property);
var producerClaims = modelBuilder.Entity<ProducerClaims>();
producerClaims.HasOne(e => e.Producer)
.WithMany(e => e.Claims)
.HasForeignKey(e => e.ProducerId);
producerClaims.HasIndex(ic => new { ic.ProducerId, ic.ClaimType })
.IsUnique();
modelBuilder.Entity<ServiceClaims>()
.HasIndex(ic => ic.ClaimType)
.IsUnique();
modelBuilder.Entity<ItemInWarehouse>()
.Navigation(ic => ic.ItemInWarehouseClaims)
.UsePropertyAccessMode(PropertyAccessMode.Property);
modelBuilder.Entity<Warehouse>()
.Navigation(ic => ic.Claims)
.UsePropertyAccessMode(PropertyAccessMode.Property);
}
public DbSet<Image> Images { get; init; }
public DbSet<Item> Items { get; init; }
public DbSet<ItemCategoryTag> ItemCategoryTags { get; init; }
public DbSet<ItemClaims> ItemClaims { get; init; }
public DbSet<ItemInWarehouse> ItemInWarehouses { get; init; }
public DbSet<ItemInWarehouseClaims> ItemInWarehousesClaims { get; init; }
public DbSet<Producers> Producers { get; init; }
public DbSet<ProducerClaims> ProducerClaims { get; init; }
public DbSet<Warehouse> Warehouses { get; init; }
public DbSet<WarehouseClaims> WarehouseClaims { get; init; }
public DbSet<ServiceClaims> ServiceClaims { get; init; }
public DbSet<DataProtectionKey> DataProtectionKeys { get; init; }
public DbSet<TaskStatusTable> TaskStatus { get; init; }
}