2016-12-26 4 views
3

Ich mache meine MVC-Anwendung, ich habe bereits einen Teil davon (mit Entity Framework) gemacht und funktioniert gut. Jedoch keine bekam ich einen Fehler:Eine Ausnahme ist in EntityFramework aufgetreten

+  InnerException {"The class 'ClassDeclarationsThsesis.Models.Subject' has no parameterless constructor."} System.Exception {System.InvalidOperationException} 


An exception of type 'System.Reflection.TargetInvocationException' occurred in EntityFramework.SqlServer.dll but was not handled in user code 

Meine Klasse sieht wie folgt aus:

public partial class Subject 
{ 
    private int v; 
    private int userid; 

    public Subject(int v, int userid, string name) 
    { 
     this.class_id = v; 
     this.user_id = userid; 
     this.name = name; 
    } 


    public int class_id { get; set; } 
    public int user_id { get; set; } 
    public string name { get; set; } 

    public virtual Group Group { get; set; } 
    public virtual Subjects_Users Subjects_Users { get; set; } 
    public virtual Task Task { get; set; } 
} 

Wie löse ich dieses Problem? Ich denke, dass ich schon alles versucht habe, was ich konnte und ich fand hier, aber nichts hat funktioniert.
Außerdem lese ich bereits Daten aus der Datenbank und benutze sie und es funktioniert. Es ist nur in diesem Fall gescheitert (zumindest bis jetzt). Ich bin wirklich verwirrt darüber.

+0

Können Sie zeigen Sie bitte die Linq-Abfrage, die diesen Fehler verursacht? Sie können es wahrscheinlich neu schreiben, um mit der aktuellen Klasse zu arbeiten. – juharr

Antwort

3

Sie müssen parameterlos Konstruktor in den Fachklasse:

public partial class Subject 
{ 
    private int v; 
    private int userid; 

    public Subject() 
    { 
    } 

    public Subject(int v, int userid, string name) 
    { 
     this.class_id = v; 
     this.user_id = userid; 
     this.name = name; 
    } 


    public int class_id { get; set; } 
    public int user_id { get; set; } 
    public string name { get; set; } 

    public virtual Group Group { get; set; } 
    public virtual Subjects_Users Subjects_Users { get; set; } 
    public virtual Task Task { get; set; } 
} 
2

In einer Sprache wie C# (oder Java) kommt jede öffentliche Klasse mit einem eigenen parameterlosen Konstruktor. Das heißt, bis Sie einen Konstruktor (irgendeinen Konstruktor) definieren, sind Sie dafür verantwortlich, alle Konstruktoren hinzuzufügen, die Sie benötigen.

Also in Ihrem Fall würden Sie hinzufügen müssen:

public Subject() {} 
+1

Ich denke nicht, dass es so einfach ist, danke! –

Verwandte Themen