PSTW_CentralizeSystem/DBContext/MMSSystemContext.cs
2025-05-16 17:30:55 +08:00

127 lines
6.4 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using PSTW_CentralSystem.Models; // Add this to use the MarineTarball class
namespace PSTW_CentralSystem.DBContext
{
public class MMSSystemContext : DbContext
{
public MMSSystemContext(DbContextOptions<MMSSystemContext> options) : base(options)
{
}
// DbSet for tbl_marine_tarball
public DbSet<MarineTarball> MarineTarballs { get; set; }
public DbSet<MarineStation> MarineStations { get; set; }
public DbSet<State> States { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Level> Levels { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Map MarineTarball to tbl_marine_tarball
modelBuilder.Entity<MarineTarball>().ToTable("tbl_marine_tarball");
// Configure properties if needed
modelBuilder.Entity<MarineTarball>(entity =>
{
entity.HasKey(e => e.Id); // Primary key
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.ReportID).HasColumnName("reportID").HasMaxLength(50);
entity.Property(e => e.FirstSampler).HasColumnName("firstSampler").HasMaxLength(50);
entity.Property(e => e.SecondSampler).HasColumnName("secondSampler").HasMaxLength(50);
entity.Property(e => e.DateSample).HasColumnName("dateSample");
entity.Property(e => e.TimeSample).HasColumnName("timeSample");
entity.Property(e => e.StationID).HasColumnName("stationID").HasMaxLength(20);
entity.Property(e => e.ClassifyID).HasColumnName("classifyID").HasMaxLength(20);
entity.Property(e => e.Latitude).HasColumnName("latitude");
entity.Property(e => e.Longitude).HasColumnName("longitude");
entity.Property(e => e.GetLatitude).HasColumnName("getLatitude");
entity.Property(e => e.GetLongitude).HasColumnName("getLongitude");
entity.Property(e => e.OptionalName1).HasColumnName("optionalName1");
entity.Property(e => e.OptionalName2).HasColumnName("optionalName2");
entity.Property(e => e.OptionalName3).HasColumnName("optionalName3");
entity.Property(e => e.OptionalName4).HasColumnName("optionalName4");
entity.Property(e => e.Timestamp).HasColumnName("timestamp");
//Configure relationship with TarballStation
entity.HasOne(m => m.MarineStation)
.WithMany()
.HasForeignKey(m => m.StationID)
.HasPrincipalKey(t => t.StationID);
//use SQL query
//========================================================
entity.HasOne(a => a.User)//Each MarineTarball has ONE User
.WithMany()//Each User can be linked to MANY MarineTarballs
.HasForeignKey(a => a.FirstSampler)//Uses FirstSampler (name string) in MarineTarball as the connector to User
.HasPrincipalKey(b => b.FullName);//match FirstSampler with the FullName in the User table
//========================================================
});
// Map TarballStation to tbl_tarball_station
modelBuilder.Entity<MarineStation>().ToTable("tbl_marine_station");
modelBuilder.Entity<MarineStation>(entity =>
{
entity.HasKey(e => e.Id); // Primary key
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.StationID).HasColumnName("stationID").HasMaxLength(20);
entity.Property(e => e.StateID).HasColumnName("stateID").HasMaxLength(10);
entity.Property(e => e.CategoryID).HasColumnName("categoryID").HasMaxLength(10);
entity.Property(e => e.LocationName).HasColumnName("locationName").HasMaxLength(50);
entity.Property(e => e.Longitude).HasColumnName("longitude").HasColumnType("decimal(10,5)");
entity.Property(e => e.Latitude).HasColumnName("latitude").HasColumnType("decimal(10,5)");
// Configure relationship with State
entity.HasOne(t => t.State)
.WithMany()
.HasForeignKey(t => t.StateID)
.HasPrincipalKey(s => s.StateID);
});
// Map State to tbl_state
modelBuilder.Entity<State>().ToTable("tbl_state");
modelBuilder.Entity<State>(entity =>
{
entity.HasKey(e => e.Id); // Primary key
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.StateID).HasColumnName("stateID").HasMaxLength(20);
entity.Property(e => e.StateName).HasColumnName("stateName").HasMaxLength(50);
});
modelBuilder.Entity<User>().ToTable("tbl_user");
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(e => e.Id); // Primary key
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.UserID).HasColumnName("userID").HasMaxLength(20);
entity.Property(e => e.FullName).HasColumnName("fullname").HasMaxLength(50);
entity.Property(e => e.Username).HasColumnName("username").HasMaxLength(40);
entity.Property(e => e.Password).HasColumnName("pwd").HasMaxLength(100);
entity.Property(e => e.LevelID).HasColumnName("levelID").HasMaxLength(10);
entity.Property(e => e.DeptID).HasColumnName("departID").HasMaxLength(10);
entity.HasOne(u => u.Level)
.WithMany()
.HasForeignKey(u => u.LevelID)
.HasPrincipalKey(c => c.LevelID);
});
modelBuilder.Entity<Level>().ToTable("tbl_level");
modelBuilder.Entity<Level>(entity =>
{
entity.HasKey(e => e.Id); // Primary key
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.LevelID).HasColumnName("levelID").HasMaxLength(10);
entity.Property(e => e.LevelName).HasColumnName("levelName").HasMaxLength(10);
});
}
}
}