Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OaaS/HeuristicLab.Services.Optimization.Billing/DataAccess/BillingContext.cs @ 9579

Last change on this file since 9579 was 9579, checked in by spimming, 11 years ago

#1888:

  • Revised model classes
  • Modified relationship definitions according to model types
File size: 3.7 KB
Line 
1using System.Data.Entity;
2using System.Data.Entity.ModelConfiguration;
3using System.Data.Entity.ModelConfiguration.Conventions;
4using HeuristicLab.Services.Optimization.Billing.Model;
5
6namespace HeuristicLab.Services.Optimization.Billing.DataAccess {
7  public class BillingContext : DbContext {
8    public DbSet<ContactInformation> ContactInformations { get; set; }
9    public DbSet<Product> Products { get; set; }
10    public DbSet<User> Users { get; set; }
11    public DbSet<Order> Orders { get; set; }
12    public DbSet<OrderLine> OrderLines { get; set; }
13    public DbSet<Invoice> Invoices { get; set; }
14    public DbSet<InvoiceLine> InvoiceLines { get; set; }
15    public DbSet<UsageRecord> UsageRecords { get; set; }
16
17    // enum PaymentMethod
18    // enum OrderState
19
20    public BillingContext()
21      : base("name=BillingContext") {
22
23    }
24
25    public BillingContext(string connectionString)
26      : base(connectionString) {
27
28    }
29
30    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
31      modelBuilder.Configurations.Add(new OrderConfiguration());
32      modelBuilder.Configurations.Add(new OrderLineConfiguration());
33      modelBuilder.Configurations.Add(new InvoiceConfiguration());
34      modelBuilder.Configurations.Add(new InvoiceLineConfiguration());
35      modelBuilder.Configurations.Add(new UsageRecordConfiguration());
36
37      modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
38
39      base.OnModelCreating(modelBuilder);
40    }
41
42    #region EntityTypeConfigurations
43
44    private class OrderConfiguration : EntityTypeConfiguration<Order> {
45      internal OrderConfiguration() {
46        this.HasRequired(o => o.User).WithMany().HasForeignKey(o => o.UserId);
47        // TODO: OrderState?
48      }
49    }
50
51    private class OrderLineConfiguration : EntityTypeConfiguration<OrderLine> {
52      internal OrderLineConfiguration() {
53        this.HasRequired(ol => ol.Order).WithMany(o => o.OrderLines).HasForeignKey(ol => ol.OrderId).WillCascadeOnDelete(true);
54        this.HasRequired(ol => ol.Product).WithMany().HasForeignKey(ol => ol.ProductId);
55      }
56    }
57
58    private class InvoiceConfiguration : EntityTypeConfiguration<Invoice> {
59      internal InvoiceConfiguration() {
60        this.HasRequired(i => i.User).WithMany().HasForeignKey(i => i.UserId);
61        this.HasRequired(i => i.Order).WithMany(o => o.Invoices).HasForeignKey(i => i.OrderId);
62      }
63    }
64
65    private class InvoiceLineConfiguration : EntityTypeConfiguration<InvoiceLine> {
66      internal InvoiceLineConfiguration() {
67        this.HasRequired(il => il.Invoice).WithMany(i => i.InvoiceLines).HasForeignKey(il => il.InvoiceId).WillCascadeOnDelete(true);
68        this.HasRequired(il => il.Product).WithMany().HasForeignKey(il => il.ProductId);
69      }
70    }
71
72    private class UsageRecordConfiguration : EntityTypeConfiguration<UsageRecord> {
73      internal UsageRecordConfiguration() {
74        this.HasRequired(ur => ur.User).WithMany().HasForeignKey(ur => ur.UserId);
75        this.HasRequired(ur => ur.Product).WithMany().HasForeignKey(ur => ur.ProductId);
76      }
77    }
78
79    #endregion
80
81    #region DB Seed Methods
82
83    public class BillingContextInitiliazer : DropCreateDatabaseIfModelChanges<BillingContext> {
84      protected override void Seed(BillingContext context) {
85        context.Products.Add(new Model.Product() {
86          Name = "Optimization-as-a-Service - Experiment execution",
87          Description = "Create and run your experiments within HeuristicLab Hive",
88          ProductId = 1,
89          Price = 10.0,
90          ProductType = "Optimization Service"
91        });
92        context.SaveChanges();
93      }
94    }
95
96    #endregion
97  }
98}
Note: See TracBrowser for help on using the repository browser.