-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathApiDbContext.cs
More file actions
50 lines (43 loc) · 1.72 KB
/
Copy pathApiDbContext.cs
File metadata and controls
50 lines (43 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using ECommerce.API.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace ECommerce.API.Data;
public class ApiDbContext(DbContextOptions<ApiDbContext> options) : DbContext(options)
{
public DbSet<Item> Items { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<Sale> Sales { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SaleItem>()
.HasKey(si => new { si.SaleId, si.ItemId });
modelBuilder.Entity<SaleItem>()
.HasOne(si => si.Sale)
.WithMany(s => s.SoldItems)
.HasForeignKey(si => si.SaleId);
modelBuilder.Entity<SaleItem>()
.HasOne(si => si.Item)
.WithMany()
.HasForeignKey(si => si.ItemId);
modelBuilder.Entity<Item>().HasQueryFilter(i => !i.IsDeleted);
modelBuilder.Entity<Sale>().HasQueryFilter(s => !s.IsDeleted);
modelBuilder.Entity<Tag>().HasQueryFilter(t => !t.IsDeleted);
modelBuilder.Entity<SaleItem>().HasQueryFilter(si => !si.Item.IsDeleted);
modelBuilder.Entity<Sale>().Ignore(s => s.TotalPrice);
}
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder
.Properties<Enum>()
.HaveConversion<string>();
}
}
public class ApiDbContextFactory : IDesignTimeDbContextFactory<ApiDbContext>
{
public ApiDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ApiDbContext>();
optionsBuilder.UseSqlite(DbConfig.GetConnectionString());
return new ApiDbContext(optionsBuilder.Options);
}
}