2017-04-05 2 views
0

ich das Modell mit Referenz Eigenschaften habenMap Referenzeigenschaftsfelder auf der gleichen Tabelle als Wurzelklasse

internal class AstronomycalBody : IAstronomycalBody 
{ 
    public long Id { get; set; } 

    public string Name { get; set; } 

    public Coord Coord { get; set; } 

    public long Mass { get; set; } 

    public double Speed { get; set; } 

    public IAstronomycalBody CentralObject { get; set; } 
} 

public class Coord 
{ 
    public long X { get; set; } 

    public long Y { get; set; } 

    public long Z { get; set; } 
} 

I-Mapping wie diese

internal class AstronomycalBodyContext : DbContext 
{ 
    public DbSet<AstronomycalBody> AstronomycalBody { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlite(DbSettings.ConnectionString); 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<AstronomycalBody>().Property(p => p.Coord.X).ForSqliteHasColumnName("CoordX"); 
     modelBuilder.Entity<AstronomycalBody>().Property(p => p.Coord.Y).ForSqliteHasColumnName("CoordY"); 
     modelBuilder.Entity<AstronomycalBody>().Property(p => p.Coord.Z).ForSqliteHasColumnName("CoordZ"); 
     modelBuilder.Entity<AstronomycalBody>().Property(p => p.CentralObject.Id).ForSqliteHasColumnName("CentralObjectId"); 
    } 
} 

verwenden möchten, um das Modell zu dieser Tabelle zur Karte:

AstronomycalBody Table

Derzeit wird der Compiler diese werfen Ausnahme ...

enter image description here

Antwort

2

Ihre AstronomycalBody ist keine gültige EF Entitätsmodell Klasse.

Erstens, EF Core does not support Complex/value types yet, so dass die Coord Mitglied sollte an Ort und Stelle erweitert werden.

Zweitens, EF nicht mit Schnittstellen arbeiten, so sollte jede Navigationsreferenz/Sammelelement Typ Einheit Klasse sein.

Damit wird gesagt, nicht sicher, wie Ihr IAstronomycalBody aussieht und wie Sie es umsetzen können, aber die Entity-Klasse sollte wie folgt sein (man könnte explizite Umsetzung einiger Mitglieder müssen):

internal class AstronomycalBody //: IAstronomycalBody 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    //public Coord Coord { get; set; } 
    public long CoordX { get; set; } 
    public long CoordY { get; set; } 
    public long CoordZ { get; set; } 
    public long Mass { get; set; } 
    public double Speed { get; set; } 
    public AstronomycalBody CentralObject { get; set; } 
} 

Nun, da durch Konvention die genaue Tabelle angezeigt wird, entfernen Sie einfach alle angezeigten Zeilen in OnModelCreating und Sie sind fertig.

Verwandte Themen