2010-12-16 3 views
1

Ich arbeite seit einigen Wochen mit EFCodeFirst (EFCTP 5), ohne Probleme.
Aber jetzt bekomme ich eine Ausnahme beim Hinzufügen einer Entität zu einer Sammlung.System.MissingMethodException: Kein Parameterloser Konstruktor für dieses Objekt definiert, wenn Entity zu Collection hinzugefügt wird

Ich habe einen User

public class User 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
} 

und ein DbContext

public class Foo : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
} 

jetzt will ich user zum DbSet fügen Sie einfach.

Foo f = new Foo(); 
User us = new User() 
{ 
    FirstName = "FooName" 
}; 

f.User.Add(us); //The exception is thrown on this line 

die Ausnahmemeldung ist

„System.MissingMethodException: keine parameterlosen Konstruktor für dieses Objekt definiert“

+0

Sind Sie sicher, dass nicht die 'new User()' Zeile den Fehler verursacht? Was ist die innere Ausnahme? Versuchen Sie, den '()' nach dem Benutzer zu entfernen, verwenden Sie einfach Objektinitialisierer. auch, sollte es nicht 'f.Users.Add' sein (nicht' für.User.Add') – RPM1984

+0

Ja, das ist nicht die'new User() 'Zeile :(Die innere Ausnahme ist null. Entfernen() hilft mir nicht. Andere Ideen? Das ist wirklich seltsam Ursache ive die Verwendung für eine Weile ohne Probleme. – dknaack

+0

Stack trace, Bitte? –

Antwort

0

Dies kann oder möglicherweise nicht für Sie arbeiten, weil meine Situation in anders dass ich das POCO Generation Template für EF4 verwende.

Ich hatte eine Entität, die readonly Eigenschaften hatte, die ich erstellt werden wollte, ohne dass diese Eigenschaftswerte festgelegt wurden, also habe ich einen parametrisierten Konstruktor erstellt. Eine der Eigenschaften, die ich festlegen musste, war eine Viele-1-Beziehung von der neuen Entität zu einer anderen. Aufgrund des Proxy-Fixup-Codes erhielt ich immer, wenn diese Entity-Eigenschaft im Konstruktor festgelegt wurde, eine InvalidOperationException parameterloser Konstruktor für meine Entität.

Lösung: erstellt einen protected parameterlosen Konstruktor, der einen leeren Körper hatte. Ich musste dies auch für seine Unterklasse tun.

1

Dies ist eine Kombination aus einem Konstruktionsfehler in EF und einem Problem mit der Reflexion.

Oft meldet es:

Missing: Nein parameterlosen Konstruktor für dieses Objekt definiert.

Wenn es heißt "Ich habe den Konstruktor aufgerufen und es hat eine Ausnahme ausgelöst".

Zum Beispiel, wenn die Verbindungszeichenfolge in einer Konfigurationsdatei falsch ist - es wird oft nicht das EF Context-Objekt erstellen; den Fehler oben werfen. Alle SQL-Ausnahmen bezüglich der fehlerhaften Verbindungszeichenfolge scheinen von EF oder dem Reflektionscode aufgefressen zu werden.

Ich vermute, dass etwas ähnliches hier passiert.

Aktivieren Sie die ersten Ausnahmen im Visual Studio. Siehe Ausnahmen im Debug-Menü, aktivieren Sie das Kontrollkästchen für "geworfen" "Common Language Runtime Ausnahmen"

Dies sollte zeigen, was im Konstruktor fehlschlägt.

Verwandte Themen