实体框架6.1:给定的关键是不是在词典present [英] Entity Framework 6.1 : The given key was not present in the dictionary

查看:287
本文介绍了实体框架6.1:给定的关键是不是在词典present的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些关系表,该程序运行正常,直到我加入这个表之间的新关系,客户表的DDL为权限code 表(第1表)是如下:

I have a table with some relations, the program works fine until I add a new relation between this table and customer table, the ddl for PermissionCode Table (first table) is as below:

CREATE TABLE [dbo].[PermissionCode] (
[Id] int NOT NULL IDENTITY(1,1) ,
[Salt] varchar(3) COLLATE Turkish_CI_AS NOT NULL ,
[Code] nvarchar(12) COLLATE Turkish_CI_AS NOT NULL ,
[StartDate] date NULL ,
[EndDate] date NULL ,
[TypeId] int NOT NULL ,
[UserId] nvarchar(128) COLLATE Turkish_CI_AS NULL ,
[OwnerId] int NULL ,
[CategoryId] int NULL ,
[IsActive] bit NOT NULL DEFAULT ((1)) ,
[InsertIdentifier] varchar(8) COLLATE Turkish_CI_AS NULL ,
[IsForTeacher] bit NOT NULL DEFAULT ((0)) ,
CONSTRAINT [PK__Table__3214EC0759063A47] PRIMARY KEY ([Id]),
CONSTRAINT [FK_PermissionCode_Category] FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[Category] ([Id]) ON DELETE SET NULL ON UPDATE NO ACTION,
CONSTRAINT [FK_PermissionCode_Customer] FOREIGN KEY ([OwnerId]) REFERENCES [dbo].[Customers] ([Id]) ON DELETE SET NULL ON UPDATE NO ACTION,
CONSTRAINT [FK_PermissionCode_PremissionCodeType] FOREIGN KEY ([TypeId]) REFERENCES [dbo].[Category] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT [FK_PermissionCode_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT [UQ__Permissi__DB7779646E01572D] UNIQUE ([Salt] ASC, [Code] ASC)
)
ON [PRIMARY]
GO   

CREATE INDEX [IX_PermissionCode_Code ] ON [dbo].[PermissionCode]
([Code] ASC) 
ON [PRIMARY]
GO

和我的客户DDL 表如下:

CREATE TABLE [dbo].[Customers] (
[Id] int NOT NULL IDENTITY(1,1) ,
[UserId] nvarchar(128) COLLATE Turkish_CI_AS NOT NULL ,
[OfficeName] nvarchar(200) COLLATE Turkish_CI_AS NULL ,
[CityId] int NULL ,
[StateId] int NULL ,
[Address] nvarchar(1000) COLLATE Turkish_CI_AS NULL ,
[Tel1] nvarchar(20) COLLATE Turkish_CI_AS NULL ,
[Tel2] nvarchar(20) COLLATE Turkish_CI_AS NULL ,
[Fax] nvarchar(20) COLLATE Turkish_CI_AS NULL ,
[ResponsiblePersonFirstName] nvarchar(50) COLLATE Turkish_CI_AS NULL ,
[ResponsiblePersonLastName] nvarchar(100) COLLATE Turkish_CI_AS NULL ,
[Deleted] bit NOT NULL DEFAULT ((0)) ,
[CustomerType] varchar(10) COLLATE Turkish_CI_AS NOT NULL ,
CONSTRAINT [PK__Customer__3214EC07345EC57D] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Customers_City] FOREIGN KEY ([CityId]) REFERENCES [dbo].[City] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT [FK_Customers_State] FOREIGN KEY ([StateId]) REFERENCES [dbo].[State] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT [FK_Customers_Users] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE ON UPDATE CASCADE
)
ON [PRIMARY]
GO

我使用 Entityframework.bulkinsert 插件批量插入权限codeS的客户。如果我删除 FK_Permission code_Customer 程序运行时没有错误,并且插入权限codeS成功地分贝,但外键添加该FK关系的实体框架的问题,这个时候错误:

I use Entityframework.bulkinsert plugin to bulk insert permission codes for a customer. If I remove FK_PermissionCode_Customer foreign key the program runs without error, and insert permission codes successfully to db, but when adding this fk relationship entity framework issue this error:

在System.Collections.Generic.Dictionary 2.get_Item(TKEY的键)
     在EntityFramework.MappingAPI.Mappers.MapperBase.BindForeignKeys()在C:\\ dev的\\ EntityFramework.MappingAPI \\行李箱的\\ src \\ EntityFramework.MappingAPI \\映射器\\ MapperBase.cs:603线
     在EntityFramework.MappingAPI.Mappings.DbMapping..ctor(的DbContext上下文)在C:\\ dev的\\ EntityFramework.MappingAPI \\行李箱的\\ src \\ EntityFramework.MappingAPI \\映射\\ DbMapping.cs:101线
     在EntityFramework.MappingAPI.EfMap.Get(的DbContext上下文)在C:\\ dev的\\ EntityFramework.MappingAPI \\行李箱的\\ src \\ EntityFramework.MappingAPI \\ EfMap.cs:行60
     在EntityFramework.MappingAPI.Extensions.MappingApiExtensions.Db(CTX的DbContext,型型)在c:\\dev\\EntityFramework.MappingAPI\\trunk\\src\\EntityFramework.MappingAPI\\Extensions\\MappingApiExtensions.cs:line 51
     在System.Linq.Enumerable.ToDictionary [TSource,TKEY的,TElement(IEnumerable的
1来源,Func键 2的KeySelectors,Func键 2 elementSelector,的IEqualityComparer 1的比较器)
     在System.Linq.Enumerable.ToDictionary [TSource,TKEY的,TElement(IEnumerable的
1来源,Func键 2的KeySelectors,Func键 2 elementSelector)
     在EntityFramework.BulkInsert.Helpers.MappedDataReader 1..ctor(IEnumerable的 1枚举,IEfBulkInsertProvider提供商)的c:\\dev\\EntityFramework.BulkInsert\\dev\\Src\\EntityFramework.BulkInsert\\Helpers\\MappedDataReader.cs:line 58
     在EntityFramework.BulkInsert.Providers.EfSqlBulkInsertProviderWithMappedDataReader.Run[T](IEnumerable<$c$c>1实体的SqlTransaction交易,BulkInsertOptions选项)中c:\\dev\\EntityFramework.BulkInsert\\dev\\Src\\EntityFramework.BulkInsert\\Providers\\EfSqlBulkInsertProviderWithMappedDataReader.cs:line 22
     在EntityFramework.BulkInsert.Providers.ProviderBase 2.Run [T](IEnumerable的 1的实体,IDbTransaction交易,BulkInsertOptions选项),在C:\\ dev的\\ EntityFramework.BulkInsert \\ dev的\\ SRC \\ EntityFramework.BulkInsert \\供应商\\ ProviderBase.cs:行77
     在EntityFramework.BulkInsert.Providers.ProviderBase
2.Run [T](IEnumerable的 1的实体,BulkInsertOptions选项),在C:\\ dev的\\ EntityFramework.BulkInsert \\ dev的\\ SRC \\的EntityFramework .BulkInsert \\供应商\\ ProviderBase.cs:105线
     在EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert [T](的DbContext背景下,IEnumerable的
1的实体,SqlBulkCopyOptions sqlBulkCopyOptions,可空 1 BATCHSIZE)在c:\\dev\\EntityFramework.BulkInsert\\dev\\Src\\EntityFramework.BulkInsert\\Extensions\\BulkInsertExtension.cs:line 95
     在EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert [T](的DbContext背景下,IEnumerable的
1的实体,可空 1 BATCHSIZE)在c:\\dev\\EntityFramework.BulkInsert\\dev\\Src\\EntityFramework.BulkInsert\\Extensions\\BulkInsertExtension.cs:line 75
     在xxx.Domain.Repositories.Permission codeRepository.InsertRange(IList的
1许可codeS)在xxx.Domain \\库\\权限codeRepository.cs:92行
     在xxx.WebUI.Admin \\控制器xxx.Admin.Controllers.Permission codeController.Create(CreatePermission codeViewModel模型)\\权限codeController.cs:行169

at System.Collections.Generic.Dictionary2.get_Item(TKey key) at EntityFramework.MappingAPI.Mappers.MapperBase.BindForeignKeys() in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Mappers\MapperBase.cs:line 603 at EntityFramework.MappingAPI.Mappings.DbMapping..ctor(DbContext context) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Mappings\DbMapping.cs:line 101 at EntityFramework.MappingAPI.EfMap.Get(DbContext context) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\EfMap.cs:line 60 at EntityFramework.MappingAPI.Extensions.MappingApiExtensions.Db(DbContext ctx, Type type) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Extensions\MappingApiExtensions.cs:line 51 at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector) at EntityFramework.BulkInsert.Helpers.MappedDataReader1..ctor(IEnumerable1 enumerable, IEfBulkInsertProvider provider) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Helpers\MappedDataReader.cs:line 58 at EntityFramework.BulkInsert.Providers.EfSqlBulkInsertProviderWithMappedDataReader.Run[T](IEnumerable1 entities, SqlTransaction transaction, BulkInsertOptions options) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Providers\EfSqlBulkInsertProviderWithMappedDataReader.cs:line 22 at EntityFramework.BulkInsert.Providers.ProviderBase2.Run[T](IEnumerable1 entities, IDbTransaction transaction, BulkInsertOptions options) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Providers\ProviderBase.cs:line 77 at EntityFramework.BulkInsert.Providers.ProviderBase2.Run[T](IEnumerable1 entities, BulkInsertOptions options) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Providers\ProviderBase.cs:line 105 at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable1 entities, SqlBulkCopyOptions sqlBulkCopyOptions, Nullable1 batchSize) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Extensions\BulkInsertExtension.cs:line 95 at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable1 entities, Nullable1 batchSize) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Extensions\BulkInsertExtension.cs:line 75 at xxx.Domain.Repositories.PermissionCodeRepository.InsertRange(IList1 permissionCodes) in xxx.Domain\Repositories\PermissionCodeRepository.cs:line 92 at xxx.Admin.Controllers.PermissionCodeController.Create(CreatePermissionCodeViewModel model) in xxx.WebUI.Admin\Controllers\PermissionCodeController.cs:line 169

我不能发现问题;为测试目的,我先改变我的数据库为code第一种方法和问题解决了。但我想现在这个问题的原因,这是一个错误?还是我需要做实体框架模型设计一个步骤?

I can't found the problem; for testing purpose, I change my db first to code first approach and problem solved. but I want to now the reason for this issue, is this a bug? or am I need do one more step in entity framework model designer?

推荐答案

这是一个错误。这是因为您必须重命名波苏斯和/或dbsetnames。

It's a bug. It happened because you have rename your pocos and/or dbsetnames.

重试dbfirst没有命名,你一定会批量它!

Retry dbfirst without rename and you'll certainly bulk it!

这篇关于实体框架6.1:给定的关键是不是在词典present的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆