.net - 插入行时 Entity Framework 和 MySQL 空引用异常

标签 .net mysql entity-framework ado.net mysql-connector

我在 EDMX 文件中创建了一个简单的测试表。该表名为 Test,只有一列 TestId。 TestId 是 Entity Key,它的 Type 是 Guid。 StoreGeneratedPattern 设置为 Identity(默认值)。

生成的 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: 

有什么想法吗?

最佳答案

解决了我自己的问题

在 EDMX 设计器中有一个名为 StoreGeneratedPattern 的属性。对于 EntityKey 是设置为 Identity。因为我在不依赖数据库的应用程序代码中生成我的主键,所以我知道我不想要这个......但是当生成 DDL 脚本时,表创建脚本中没有任何东西可以强制标识所以我想没关系。

当我将值从 Identity 更改为 None 时,它​​起作用了......看图

关于.net - 插入行时 Entity Framework 和 MySQL 空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403978/

相关文章:

.net - System.Net.HttpListener 仅显式实现 IDisposable

c# - rc1.final 中的 User.Identity 中不存在 getUserId

MySql:使用 WHERE 子句将数据从一个表复制到另一个表

c# - 不能 "Add or Update"实体,因为无法更改主键

c# - 如何在 ASP.NET MVC 3 Entity Framework 中使用 DBContext 映射存储过程

.net - 如果我有最低要求的版本,如何回滚 clickOnce?

.net - DataWedge 库 - 摩托罗拉 MC55 条码扫描速度非常慢

c# - "Process.Close()"有必要吗?

mysql - SQL 非规范化,将表列组合到另一个表列

php - Jquery、Ajax、PHP : Editing mysql entries