3

Ich habe ein Datenbankschema namens BigDataOverview. Die meisten meiner Anwendungen sind bereits mit einem anderen Schema namens AdminDb verbunden.Erstellen eines Controllers für DevOps in .Net Core

Ich habe auch eine .NET-Kernanwendung, die gut in mein AdminDb-Schema integriert ist.

Mein sekundäres Schema hat 13 verschiedene Tabellen, die mit Zahlen als Namen und einer einzelnen Tabelle namens "SimpleDataOverview" benannt sind.

Ich möchte jetzt dieses sekundäre Schema zu meiner Anwendung hinzufügen, so dass ich die Daten { get; } in meiner Anwendung anzeigen kann.

"ConnectionStrings": { 
    "DefaultConnection":"server=<placeholder>;database=AdminDB;sslmode=none;", 
    "OverviewDataConnection": "server=<placeholder>;database=BigDataOverview;sslmode=none;" 
} 

Alle 13 Tabellen, die Zahlen als Namen zueinander in Bezug auf die Felder (Spalten) identisch sind:

Ich habe meine Connectionstring in meinem appsettings.json einrichten. Deshalb habe ich ein Modell erstellt, alle von ihnen entsprechen: NumberTableModel.cs

public class NumberTableModel 
{ 
    [Key] 
    public int RowID { get; } 

    public int SensorID { get; } 
    public DateTime ReadingDate { get; } 
    public int ReadingCount { get; } 
    public float ApproxDataSize { get; } 
    public Time ReadingTime { get; } 
    public string JsonData { get; } 
    public long LastUpdate { get; } 
    public string Source { get; } 
} 

ich auch eine DbContext erstellt haben: DevOpsDbContext

public class DevOpsDbContext : DbContext 
{ 
    public DevOpsDbContext(DbContextOptions<DevOpsDbContext> options) : base(options) 
    { 
    } 

    public DbSet<NumberTableModel> _353224061929963 { get; set; } 
    public DbSet<NumberTableModel> _353224061929964 { get; set; } 
    public DbSet<NumberTableModel> _353224061929965 { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<NumberTableModel>().ToTable("353224061929963"); 
     modelBuilder.Entity<NumberTableModel>().ToTable("353224061929964"); 
     modelBuilder.Entity<NumberTableModel>().ToTable("353224061929965"); 
    } 
} 

Und ich habe es bis in meine Startup.cs:

services.AddDbContext<DevOpsDbContext>(options => 
    options.UseMySql(Configuration.GetConnectionString("OverviewDataConnection"))); 

enter image description here

aber wenn ich versuche, ein Controller mit Ansichten zu erstellen, unter Verwendung von Entity Framework, Visual Studio wird mit folgenden Fehlermeldung beschweren:

enter image description here

Und ich glaube, mich .... Ich Ich bin sehr dankbar für jede Hilfe.

Antwort

2

Ich glaube nicht, dass Sie eine Klasse mit mehreren Tabellen in EF verwenden können. Vielleicht ist es die Quelle Ihres Fehlers? Versuchen Sie, eine Elternklasse und ein Kind von Tabelle zu erstellen:

public abstract class NumberTableModel 
{ 
    [Key] 
    public int RowID { get; } 

    public int SensorID { get; } 
    public DateTime ReadingDate { get; } 
    public int ReadingCount { get; } 
    public float ApproxDataSize { get; } 
    public Time ReadingTime { get; } 
    public string JsonData { get; } 
    public long LastUpdate { get; } 
    public string Source { get; } 
} 

public class NumberTableModel1 : NumberTableModel { } 

public class NumberTableModel2: NumberTableModel { } 

public class NumberTableModel3: NumberTableModel { } 

Und in Ihrem DevOpsDbContext:

public class DevOpsDbContext : DbContext 
{ 
    public DevOpsDbContext(DbContextOptions<DevOpsDbContext> options) : base(options) 
    { 
    } 

    public DbSet<NumberTableModel1> _353224061929963 { get; set; } 
    public DbSet<NumberTableModel2> _353224061929964 { get; set; } 
    public DbSet<NumberTableModel3> _353224061929965 { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<NumberTableModel1>().ToTable("353224061929963"); 
     modelBuilder.Entity<NumberTableModel2>().ToTable("353224061929964"); 
     modelBuilder.Entity<NumberTableModel3>().ToTable("353224061929965"); 
    } 
} 
+0

Ich werde dies so bald versuchen, wie ich Zeit habe. Vielen Dank! Ich werde Sie wissen lassen, ob es das Problem behebt. – Zeliax