ApplicationDbContext.cs 3.6 KB
Newer Older
麦壳饼's avatar
麦壳饼 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Linq;
namespace IoTSharp.Hub.Data
{
    public class ApplicationDbContext : IdentityDbContext
    {
        IConfiguration _configuration;
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IConfiguration configuration)
            : base(options)
        {
            _configuration = configuration;
            var _DataBase = configuration["DataBase"] ?? "sqlite";
            if (Enum.TryParse(_DataBase, out DatabaseType databaseType))
            {
                DatabaseType = databaseType;
            }
            if (this.Database.EnsureCreated())
            {
                if (Database.GetPendingMigrations().Count() > 0)
                {
麦壳饼's avatar
麦壳饼 已提交
24
                //    Database.Migrate();
麦壳饼's avatar
麦壳饼 已提交
25 26 27 28 29 30 31
                }
            }
        }
        public DatabaseType DatabaseType { get; private set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
麦壳饼's avatar
麦壳饼 已提交
32
            base.OnModelCreating(modelBuilder);
麦壳饼's avatar
麦壳饼 已提交
33
        
麦壳饼's avatar
麦壳饼 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
            switch (DatabaseType)
            {
                case DatabaseType.mssql:
                    ForSqlServer(modelBuilder);
                    break;
                case DatabaseType.npgsql:
                    ForNpgsql(modelBuilder);
                    break;
                case DatabaseType.sqlite:
                    break;
                default:
                    break;
            }
        }

        private void ForNpgsql(ModelBuilder modelBuilder)
        {
麦壳饼's avatar
麦壳饼 已提交
51
            modelBuilder.Entity<TelemetryData>()
麦壳饼's avatar
麦壳饼 已提交
52 53 54
            .Property(b => b.Value_Json)
            .HasColumnType("jsonb");

麦壳饼's avatar
麦壳饼 已提交
55
            modelBuilder.Entity<TelemetryData>()
麦壳饼's avatar
麦壳饼 已提交
56 57 58
            .Property(b => b.Value_XML)
            .HasColumnType("xml");

麦壳饼's avatar
麦壳饼 已提交
59
            modelBuilder.Entity<AttributeLatest>()
麦壳饼's avatar
麦壳饼 已提交
60 61 62
            .Property(b => b.Value_Json)
            .HasColumnType("jsonb");

麦壳饼's avatar
麦壳饼 已提交
63
            modelBuilder.Entity<AttributeLatest>()
麦壳饼's avatar
麦壳饼 已提交
64 65 66
            .Property(b => b.Value_XML)
            .HasColumnType("xml");

麦壳饼's avatar
麦壳饼 已提交
67
            modelBuilder.Entity<AttributeData>()
麦壳饼's avatar
麦壳饼 已提交
68 69 70
            .Property(b => b.Value_Json)
            .HasColumnType("jsonb");

麦壳饼's avatar
麦壳饼 已提交
71 72 73 74 75 76 77 78 79
            modelBuilder.Entity<AttributeData>()
            .Property(b => b.Value_XML)
            .HasColumnType("xml");

            modelBuilder.Entity<TelemetryLatest>()
      .Property(b => b.Value_Json)
      .HasColumnType("jsonb");

            modelBuilder.Entity<TelemetryLatest>()
麦壳饼's avatar
麦壳饼 已提交
80 81 82 83 84
            .Property(b => b.Value_XML)
            .HasColumnType("xml");
        }
        private void ForSqlServer(ModelBuilder modelBuilder)
        {
麦壳饼's avatar
麦壳饼 已提交
85
            modelBuilder.Entity<TelemetryData>()
麦壳饼's avatar
麦壳饼 已提交
86 87
            .Property(b => b.Value_XML)
            .HasColumnType("xml");
麦壳饼's avatar
麦壳饼 已提交
88
            modelBuilder.Entity<AttributeLatest>()
麦壳饼's avatar
麦壳饼 已提交
89 90
            .Property(b => b.Value_XML)
            .HasColumnType("xml");
麦壳饼's avatar
麦壳饼 已提交
91
            modelBuilder.Entity<AttributeData>()
麦壳饼's avatar
麦壳饼 已提交
92 93
            .Property(b => b.Value_XML)
            .HasColumnType("xml");
麦壳饼's avatar
麦壳饼 已提交
94 95 96 97

            modelBuilder.Entity<TelemetryLatest>()
    .Property(b => b.Value_XML)
    .HasColumnType("xml");
麦壳饼's avatar
麦壳饼 已提交
98 99 100 101 102 103
        }
        public DbSet<Tenant> Tenant { get; set; }
        public DbSet<Customer> Customer { get; set; }

        public DbSet<Relationship> Relationship { get; set; }
        public DbSet<Device> Device { get; set; }
麦壳饼's avatar
麦壳饼 已提交
104 105 106 107 108 109

        public DbSet<TelemetryData> TelemetryData { get; set; }
        public DbSet<AttributeLatest> AttributeLatest { get; set; }
        public DbSet<AttributeData> AttributeData { get; set; }

        public DbSet<TelemetryLatest> TelemetryLatest { get; set; }
麦壳饼's avatar
麦壳饼 已提交
110 111 112 113


    }
}