gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:36:06 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com