【问题标题】:Entity Framework and MySQL null reference exceptions when inserting a row插入行时实体框架和 MySQL 空引用异常
【发布时间】:2010-12-09 22:59:22
【问题描述】:

我在 EDMX 文件中创建了一个简单的测试表。该表称为Test,其中有一列TestId。 TestId 是实体键,它的类型是 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: 

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    解决了我自己的问题

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2016-05-11
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      相关资源
      最近更新 更多