2010-11-19 8 views
1

Ich entdeckte heute Abend SubSonic, und nach ein wenig Spiel mit ihm und MySQL Connector-Versionen, habe ich es schließlich zu akzeptieren meine Verbindungszeichenfolge Einrichten eines einfachen Repository.Null Referenz Ausnahmen beim Hinzufügen

Also habe ich eine einfache Klasse erstellt und bin in die Stadt gegangen, habe der Klasse einige Daten hinzugefügt, dann einen Repo erstellt und versucht, den Datensatz zu speichern.

Alles, was ich scheinen kann aus ihm heraus zu bekommen, ist null Ausnahmefehler, wenn ich rufe:

repo.Add (Benutzer);

Keine Ahnung, was null ist, und der Fehler ist nicht sehr klar.

An einem Punkt änderte ich den Typ meines ID-Feldes in meiner User-Klasse zu einem langen und bekam einen weiteren Fehler von SubSonic (sagen, es konnte nicht sagen, welches Feld war mein ID-Feld und sagte mir, es ID zu nennen) oder setzen Sie ein Tag darauf, aber es war bereits ID)

Ich habe Daten in jedem Feld in der Klasse, auch diejenigen, die nicht per Datenbank benötigt werden, aber nichts.

Ich verbrachte den Rest des Abends googeln für Informationen über meinen Fehler, aber kein Glück, und die Dokumentation auf der Website hat mich auch nirgends bekommen.

Irgendeine Idee, was ich falsch mache, oder wie ich das möglicherweise diagnostizieren könnte?

Vielen Dank im Voraus für jede Hilfe ...

Hier ist die Ausnahme Details

System.NullReferenceException unhandled war Message = Objektverweis auf eine Instanz eines Objekts eingestellt. Source = MySql.Data Stacktrace: bei MySql.Data.MySqlClient.MySqlConnection.get_ServerThread() bei MySql.Data.MySqlClient.MySqlConnection.Abort() bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior Verhalten) bei MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader (CommandBehavior Verhalten) bei System.Data.Common.DbCommand.ExecuteReader (CommandBehavior Verhalten) bei SubSonic.DataProviders.DbDataProvider.ExecuteReader (QueryCommand qry) bei SubSonic.Query.Insert .ExecuteReader() bei SubSonic.Repository.SimpleRepository.Add [T] (T-Element) bei gc_ss.Program.Main (String [] args) in C: \ Benutzer \ Michael \ Desktop \ Subsonic_Demo \ gc_ss \ gc_ss \ P rogram.cs: Leitung 27 bei System.AppDomain._nExecuteAssembly (Montagebaugruppe, String [] args) bei System.AppDomain.ExecuteAssembly (String assembly, Evidence assemblySecurity, String [] args) bei Microsoft.VisualStudio.HostingProcess.HostProc (.RunUsersAssembly) bei System.Threading.ThreadHelper.ThreadStart_Context (Object state) bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Context Rückruf, Objektzustand) bei System.Threading.ThreadHelper.ThreadStart() Innerexception:

Ein weiteres Update

Ich merke, dass, wenn ich die Klasse ändern (Benutzer) und eine der Eigenschaften ändern, dass die Eigenschaft Änderungen in der Datenbank widergespiegelt werden.Auch wenn ich den Tisch fallen lasse, wird er basierend auf meiner Klasse konstruiert. Der Migrationsteil funktioniert also, danach passiert etwas.

Schluss aktualisieren

Okay, löschte ich die Tabelle, und änderte die Klasse eine lange das ID-Feld zu verwenden. Auf "RunMigrations" festgelegt und erneut ausgeführt, und es ist fehlgeschlagen, da für die ID kein Standardwert festgelegt wurde. Ich setze die Spalte in MySQL auf AutoIncrement und alles funktioniert jetzt gut. Ich bin mir nicht sicher, wie es anders ist, als es gestern auf lang zu setzen (es sei denn, die Änderungen wurden nicht so angewendet, wie ich dachte).

Wie dem auch sei, so dass ich denke, diese Frage geschlossen ist ...

Antwort

0

Dies ist ein Problem mit dem mysql.data Anbieter. Normalerweise würde der Connector eine sinnvolle Exception auslösen, aber bevor er auftritt, hat er eine interne Nullreferenz-Ausnahme.

Sehen Sie sich meine Antwort hier an: Subsonic 3.0.0.4 ActiveRecord Template for MySQL error on inserting new record
Das erklärt, wie man das umgeht.

+0

Entschuldigung, ich war schon wieder zuhause, als ich mich entschied, die Frage zu stellen: – Mike

+0

Ich aktualisierte meine Antwort. Sie haben wahrscheinlich einen Fehler in Ihrer SQL-Syntax für den Generierungsteil. Nicht jeder .net-Typ ist standardmäßig mit Subsonic verwendbar. Schauen Sie sich die mysql.ttinclude an dort haben Sie eine Methode, die das Mapping durchführt und ich nehme an, dass Sie für lange den String korrigieren müssen, der den DBType definiert (ich würde BIGINT empfehlen) –