2010-12-09 6 views
4

Ich habe eine einfache Test-Tabelle in einer EDMX-Datei erstellt. Die Tabelle heißt Test mit einer Spalte, TestId. TestId ist der Entitätsschlüssel und sein Typ ist Guid. StoreGeneratedPattern wird auf Identität (der Standardwert) festgelegt.Entity Framework und MySQL Null Referenz Ausnahmen beim Einfügen einer Zeile

Die generierte SQL sieht wie folgt aus:

 using (var foo = new TestModelContainer()) 
     { 
      var test = new Test() { 
       TestId = Guid.NewGuid() 
      }; 

      foo.Tests.AddObject(test); 
      foo.SaveChanges(); 
     } 

Ich bin ein NULL-Verweis Ausnahme bekommen, wenn ich Savechanges:

CREATE TABLE `Tests` (
    `TestId` CHAR(36) BINARY NOT NULL 
); 

ALTER TABLE `Tests` 
ADD CONSTRAINT `PK_Tests` 
    PRIMARY KEY (`TestId`); 

nun der Körper meines Code sieht wie folgt aus. Der Stack-Trace geht tief in die Eingeweide des MySQL Connector (Ich bin mit Version 6.3.5):

System.NullReferenceException was unhandled 
    Message=Object reference not set to an instance of an object. 
    Source=MySql.Data.Entity 
    StackTrace: 
     at MySql.Data.Entity.SqlGenerator.GenerateReturningSql(DbModificationCommandTree tree, DbExpression returning) 
     at MySql.Data.Entity.InsertGenerator.GenerateSQL(DbCommandTree tree) 
     at MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) 
     at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) 
     at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree) 
     at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
     at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
     at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
     at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
     at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
     at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
     at System.Data.Objects.ObjectContext.SaveChanges() 
     at EFMySQL.Program.Main(String[] args) in C:\Users\david.pio\Documents\Visual Studio 2010\Projects\EFMySQL\EFMySQL\Program.cs:line 40 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

Irgendwelche Ideen?

Antwort

3

meine eigene Frage

im Designer EDMX Gelöst gibt es eine Eigenschaft namens StoreGeneratedPattern. Für den EntityKey wird is auf Identity gesetzt. Da ich meine Primärschlüssel im App-Code erzeuge, der nicht auf die DB angewiesen ist, weiß ich, dass ich das nicht will ... aber wenn das DDL-Skript erzeugt wird, gibt es nichts im Tabellenerstellungsskript, das die Identität erzwingt, so dass ich dachte das war in Ordnung.

Wenn ich den Wert von Identität auf Keine geändert habe, funktioniert es .... gehen Abbildung