2016-07-12 11 views
1

Ich versuche, einen Controller mit einem Modell zu erstellen, die benutzerdefinierte Typen in sich hat ...Fehler beim Erstellen des Controllers mit benutzerdefinierten Typ mit Entity Framework MVC ASP.NET

Ich habe eine Hauptklasse mit ID und einen Typ "Arbeit", wo ich drei Eigenschaften deklarierte, von denen eine auf die anderen beiden angewiesen ist. Dann habe ich einen dbset-Typ erstellt. Sind meine Zuordnungseigenschaften falsch?

Ich erhalte den folgenden Fehler: Beim Ausführen des ausgewählten Codegenerators ist ein Fehler aufgetreten: "Metadaten für 'Stack.Models.Work' konnten nicht abgerufen werden". Die Eigenschaftensumme ist keine deklarierte Eigenschaft für den Typ Math. Vergewissern Sie sich, dass die Eigenschaft nicht explizit aus dem Modell ausgeschlossen wurde, indem Sie die Annotationsmethode Ignore Method oder NotMappedAttribute verwenden. Stellen Sie sicher, dass es sich um eine gültige primitive Eigenschaft handelt.

namespace stack.Models 
{ 
public class Work 
{ 
    [Key] 
    public int ID { get; set; } 

    public Work() 
    { 
     this.Maths = new Math(); 
    } 



    public Math Maths { get; set; } 


} 


[ComplexType] 
public class Math 
{ 

    public int first { get; set; } 
    public int second { get; set; } 
    public int sum 
    { 
     get 
     { 
      try 
      { 
       return first + second; 
      } 
      catch 
      { 
       return 0; 
      } 
     } 

    } 
} 


public class WorkDBContext: DbContext 
{ 
    public DbSet<Work> Working { get; set; } 



    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.first).IsRequired(); 

     modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.second).IsRequired(); 

     modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.sum).IsRequired(); 


     base.OnModelCreating(modelBuilder); 
    } 

} 


} 
+0

'sum' a berechnet wird, schreibgeschützte Eigenschaft, damit es nicht zu einem Datenbankfeld zugeordnet werden können. Haben Sie das vorgeschlagene '[NotMapped]' Attribut versucht? Warum setzen Sie einen berechneten Wert auf 'isRequired'? –

Antwort

0

Summe ist kein einfacher Typ (Spalte in der Datenbank) ist eine Datenfunktion (von anderen properites berechnet), können Sie es nicht in der Datenbank zu speichern haben.

[ComplexType] 
public class Math 
{ 

    public int first { get; set; } 
    public int second { get; set; } 

    [NotMapped] 
    public int sum 
    { 
     get 
     { 
      return first + second; 
     } 
    } 
} 

Entfernen Sie diese Zeile:

modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.sum).IsRequired(); 
+0

Danke das hat super funktioniert! – johndoesnow