我有一个带有一些关系的表,程序工作正常,直到我在该表和customer
表,ddlPermissionCode
表(第一表)如下:
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
和我的 ddlcustomer
表格如下:
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
I use Entityframework.bulkinsert https://efbulkinsert.codeplex.com/用于批量插入客户权限代码的插件。如果我删除FK_PermissionCode_Customer
外键程序运行没有错误,并且成功地将权限代码插入数据库,但是在添加此 fk 关系实体框架时出现此错误:
在 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](IEnumerable
1 个来源、功能2 keySelector, Func
2 元素选择器、IEqualityComparer1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable
1 个来源、功能2 keySelector, Func
2 元素选择器)
在 EntityFramework.BulkInsert.Helpers.MappedDataReader1..ctor(IEnumerable
1 个可枚举的 IEfBulkInsertProvider 提供程序)位于 c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Helpers\MappedDataReader.cs 中:第 58 行
在 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.ProviderBase
2.运行[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.ProviderBase
2.运行[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, IEnumerable
1 个实体,SqlBulkCopyOptions sqlBulkCopyOptions,可为 Null1 batchSize) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Extensions\BulkInsertExtension.cs:line 95
at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable
1 个实体,可为空1 batchSize) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Extensions\BulkInsertExtension.cs:line 75
at xxx.Domain.Repositories.PermissionCodeRepository.InsertRange(IList
1 个权限代码)位于 xxx.Domain\Repositories\PermissionCodeRepository.cs:第 92 行
在 xxx.WebUI.Admin\Controllers\PermissionCodeController.cs 中的 xxx.Admin.Controllers.PermissionCodeController.Create(CreatePermissionCodeViewModel model):第 169 行
我找不到问题;出于测试目的,我首先将数据库更改为代码优先方法并解决问题。但我现在想知道这个问题的原因,这是一个错误吗?或者我是否需要在实体框架模型设计器中再执行一步?