-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathECommerceAPIDbContext.cs
More file actions
67 lines (57 loc) · 2.55 KB
/
ECommerceAPIDbContext.cs
File metadata and controls
67 lines (57 loc) · 2.55 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using ECommerceAPI.Domain.Entities;
using ECommerceAPI.Domain.Entities.Common;
using ECommerceAPI.Domain.Entities.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace ECommerceAPI.Persistence.Contexts
{
public class ECommerceAPIDbContext : IdentityDbContext<AppUser, AppRole, string>
{
public ECommerceAPIDbContext(DbContextOptions options) : base(options)
{ }
public DbSet<Product> Products { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Domain.Entities.File> Files { get; set; }
public DbSet<ProductImageFile> ProductImageFiles { get; set; }
public DbSet<InvoiceFile> InvoiceFiles { get; set; }
public DbSet<Basket> Baskets { get; set; }
public DbSet<BasketItem> BasketItems { get; set; }
public DbSet<CompletedOrder> CompletedOrders { get; set; }
public DbSet<Menu> Menus { get; set; }
public DbSet<Endpoint> Endpoints { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Order>()
.HasKey(o => o.Id);
builder.Entity<Order>()
.HasIndex(o => o.OrderCode)
.IsUnique();
builder.Entity<Basket>()
.HasOne(b => b.Order)
.WithOne(o => o.Basket)
.HasForeignKey<Order>(b => b.Id);
builder.Entity<Order>()
.HasOne(o => o.CompletedOrder)
.WithOne(co => co.Order)
.HasForeignKey<CompletedOrder>(o => o.OrderId);
base.OnModelCreating(builder);
}
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
//ChangeTracker : Entityler üzerinden yapılan değişiklerin ya da yeni eklenen verinin yakalanmasını sağlayan propertydir. Update operasyonlarında Track edilen verileri yakalayıp elde etmemizi sağlar.
var datas = ChangeTracker
.Entries<BaseEntity>();
foreach (var data in datas)
{
_ = data.State switch
{
EntityState.Added => data.Entity.CreatedDate = DateTime.UtcNow,
EntityState.Modified => data.Entity.UpdatedDate = DateTime.UtcNow,
_ => DateTime.Now
};
}
return await base.SaveChangesAsync(cancellationToken);
}
}
}