2010-12-09 49 views
4

我在EDMX文件中創建了一個簡單的測試表。該表稱爲Test,其中包含一列TestId。 TestId是實體鍵,它的類型是Guid。 StoreGeneratedPattern被設置爲Identity(默認)。插入一行時實體框架和MySQL空引用異常

生成的SQL是這樣的:

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

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

現在我的代碼的身體看起來是這樣的:

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

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

我得到一個空引用異常時,我的SaveChanges。堆棧跟蹤深入到MySql連接器的內部(我正在使用版本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: 

任何想法?

回答

3

解決我自己的問題

在EDMX設計師有一個名爲StoreGeneratedPattern屬性。因爲EntityKey被設置爲Identity。因爲我在不依賴數據庫的應用程序代碼中生成主鍵,所以我知道我不想要這個......但是,當生成DDL腳本時,表創建腳本中沒有任何內容強制執行該身份,因此我想那是好的。

當我從身份更改值爲無,它的工作....去圖