2010-12-09 51 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脚本时,表创建脚本中没有任何内容强制执行该身份,因此我想那是好的。

当我从身份更改值为无,它的工作....去图