Escali License control 1
DataContext.cs
Gå til dokumentasjonen til denne filen.
2using Microsoft.EntityFrameworkCore;
3using Microsoft.Extensions.Configuration;
4
6{
7
8public class DataContext : DbContext
9{
10
11 // TODO Divide into multiple files
12
13 public DbSet<Product> Products { get; set; }
14 public DbSet<Module> Modules { get; set; }
15 public DbSet<ModuleLevel> ModuleLevels { get; set; }
16 public DbSet<PriceElement> PriceElements { get; set; }
17 public DbSet<PriceList> PriceLists { get; set; }
18 public DbSet<Customer> Customers { get; set; }
19 public DbSet<Priority> Priorities { get; set; }
20 public DbSet<Segment> Segments { get; set; }
21 public DbSet<MainSegment> MainSegments { get; set; }
22 public DbSet<User> Users { get; set; }
23 public DbSet<Region> Regions { get; set; }
24 public DbSet<Currency> Currencies { get; set; }
25 public DbSet<AgreementElement> AgreementElements { get; set; }
26 public DbSet<Agreement> Agreements { get; set; }
27
28 public DataContext(DbContextOptions<DataContext> options) : base(options) {}
29
30 protected override void OnModelCreating(ModelBuilder modelBuilder)
31 {
32 // OnModelCreatingPartial(modelBuilder);
33
34 // Default values
35 modelBuilder.Entity<ModuleLevel>()
36 .Property(m => m.IsActive)
37 .HasDefaultValue(true);
38
39 modelBuilder.Entity<Module>()
40 .Property(m => m.IsActive)
41 .HasDefaultValue(true);
42
43 modelBuilder.Entity<PriceElement>()
44 .Property(p => p.IsActive)
45 .HasDefaultValue(true);
46
47 modelBuilder.Entity<PriceList>()
48 .Property(p => p.IsActive)
49 .HasDefaultValue(true);
50
51 modelBuilder.Entity<Customer>()
52 .Property(c => c.IsActive)
53 .HasDefaultValue(true);
54
55 modelBuilder.Entity<AgreementElement>()
56 .Property(a => a.IsActive)
57 .HasDefaultValue(true);
58
59 modelBuilder.Entity<AgreementElement>()
60 .Property(a => a.IsQuotation)
61 .HasDefaultValue(false);
62
63 modelBuilder.Entity<AgreementElement>()
64 .Property(a => a.KeepPriceOnNextPricelist)
65 .HasDefaultValue(false);
66
67 modelBuilder.Entity<Agreement>()
68 .Property(a => a.IsActive)
69 .HasDefaultValue(true);
70
71 modelBuilder.Entity<Priority>()
72 .Property(p => p.PriorityName)
73 .HasDefaultValue(null);
74
75 modelBuilder.Entity<Customer>()
76 .Property(c => c.CustomerSince)
77 .HasDefaultValueSql("getdate()");
78
79 modelBuilder.Entity<Agreement>()
80 .Property(a => a.AgreementCreated)
81 .HasDefaultValueSql("getdate()");
82
83 modelBuilder.Entity<AgreementElement>()
84 .Property(ae => ae.AgreementElementCreated)
85 .HasDefaultValueSql("getdate()");
86
87 // Enum convert
88 modelBuilder.Entity<Priority>()
89 .Property(p => p.PriorityName)
90 .HasConversion<string>();
91
92 // Delete behaviour
93 modelBuilder.Entity<Product>()
94 .HasMany<PriceList>(p => p.PriceLists)
95 .WithOne(pl => pl.Product)
96 .OnDelete(DeleteBehavior.Restrict);
97
98 modelBuilder.Entity<Product>()
99 .HasMany<Agreement>(p => p.Agreements)
100 .WithOne(a => a.Product)
101 .OnDelete(DeleteBehavior.Restrict);
102
103 modelBuilder.Entity<Product>()
104 .HasMany<Module>(p => p.Modules)
105 .WithOne(m => m.Product)
106 .OnDelete(DeleteBehavior.Restrict);
107
108 modelBuilder.Entity<Module>()
109 .HasMany<ModuleLevel>(m => m.ModuleLevels)
110 .WithOne(m => m.Module)
111 .OnDelete(DeleteBehavior.Restrict);
112
113 modelBuilder.Entity<ModuleLevel>()
114 .HasMany<PriceElement>(m => m.PriceElements)
115 .WithOne(p => p.ModuleLevel)
116 .OnDelete(DeleteBehavior.Restrict);
117
118 modelBuilder.Entity<PriceList>()
119 .HasMany<PriceElement>(m => m.PriceElements)
120 .WithOne(p => p.PriceList)
121 .OnDelete(DeleteBehavior.Restrict);
122
123 modelBuilder.Entity<Currency>()
124 .HasMany<PriceList>()
125 .WithOne(p => p.Currency)
126 .OnDelete(DeleteBehavior.Restrict);
127
128 modelBuilder.Entity<Currency>()
129 .HasMany<Agreement>()
130 .WithOne(a => a.Currency)
131 .OnDelete(DeleteBehavior.Restrict);
132
133 modelBuilder.Entity<Agreement>()
134 .HasMany<AgreementElement>(a => a.AgreementElements)
135 .WithOne(a => a.Agreement)
136 .OnDelete(DeleteBehavior.Restrict);
137
138 modelBuilder.Entity<ModuleLevel>()
139 .HasMany<AgreementElement>(m => m.AgreementElements)
140 .WithOne(a => a.ModuleLevel)
141 .OnDelete(DeleteBehavior.Restrict);
142
143 modelBuilder.Entity<Customer>()
144 .HasMany<Agreement>(c => c.Agreements)
145 .WithOne(a => a.Customer)
146 .OnDelete(DeleteBehavior.Restrict);
147
148 modelBuilder.Entity<Segment>()
149 .HasMany<Customer>()
150 .WithOne(c => c.Segment)
151 .OnDelete(DeleteBehavior.SetNull);
152
153 modelBuilder.Entity<MainSegment>()
154 .HasMany<Segment>(ms => ms.Segments)
155 .WithOne(s => s.MainSegment)
156 .OnDelete(DeleteBehavior.SetNull);
157
158 modelBuilder.Entity<Priority>()
159 .HasMany<Customer>()
160 .WithOne(c => c.Priority)
161 .OnDelete(DeleteBehavior.SetNull);
162
163
164 modelBuilder.Entity<User>()
165 .HasMany<Customer>(u => u.Customers)
166 .WithOne(c => c.User)
167 .OnDelete(DeleteBehavior.SetNull);
168
169
170 modelBuilder.Entity<Region>()
171 .HasMany<Customer>()
172 .WithOne(c => c.Region)
173 .OnDelete(DeleteBehavior.SetNull);
174
175 // Unique attributes
176 modelBuilder.Entity<Product>()
177 .HasIndex(p => p.ProductName)
178 .IsUnique();
179
180 modelBuilder.Entity<PriceList>()
181 .HasIndex(p => p.PriceListName)
182 .IsUnique();
183
184 modelBuilder.Entity<Currency>()
185 .HasIndex(c => c.CurrencyName)
186 .IsUnique();
187
188 modelBuilder.Entity<Customer>()
189 .HasIndex(c => c.OrganizationNumber)
190 .IsUnique();
191
192 modelBuilder.Entity<Customer>()
193 .HasIndex(c => c.CustomerName)
194 .IsUnique();
195
196 modelBuilder.Entity<User>()
197 .HasIndex(u => u.UserEmail)
198 .IsUnique();
199
200 modelBuilder.Entity<MainSegment>()
201 .HasIndex(ms => ms.MainSegmentName)
202 .IsUnique();
203
204 modelBuilder.Entity<Segment>()
205 .HasIndex(s => s.SegmentName)
206 .IsUnique();
207
208 // TODO add unique names for other entities here...
209
210 }
211
212 // partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
213 }
214}
DataContext(DbContextOptions< DataContext > options)
Definition: DataContext.cs:28
override void OnModelCreating(ModelBuilder modelBuilder)
Definition: DataContext.cs:30