Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在实体框架中添加唯一索引可防止数据表显示工作_Jquery_Sql Server_Asp.net Mvc_Entity Framework_Datatables - Fatal编程技术网

Jquery 在实体框架中添加唯一索引可防止数据表显示工作

Jquery 在实体框架中添加唯一索引可防止数据表显示工作,jquery,sql-server,asp.net-mvc,entity-framework,datatables,Jquery,Sql Server,Asp.net Mvc,Entity Framework,Datatables,这是一个非常简单的结构-外键为1到多的父-子结构 工作正常,但我想通过添加复合唯一索引来强制唯一性,如下所示: CreateIndex("dbo.Fixtures", new[] { "MarketId", "BookName", "CoupName" }, unique: true, name: "IX_UniqueFixture"); 在此之后,当我输入新记录时,它产生了错误: 然后我删除了新添加的索引,并删除了添加索引后添加的记录,它可以显示添加索引之前的记录 但是,当我再次尝试使用新

这是一个非常简单的结构-外键为1到多的父-子结构

工作正常,但我想通过添加复合唯一索引来强制唯一性,如下所示:

CreateIndex("dbo.Fixtures", new[] { "MarketId", "BookName", "CoupName" }, unique: true, name: "IX_UniqueFixture");
在此之后,当我输入新记录时,它产生了错误:

然后我删除了新添加的索引,并删除了添加索引后添加的记录,它可以显示添加索引之前的记录

但是,当我再次尝试使用新记录更新数据库时,它返回到相同的错误:

错误消息下面显示的记录是在添加前面提到的索引之前存在的记录

现在,在重新设置父查找表Id列的种子后,它就可以正常工作了

USE [aspnet-Arb-20160906102730] 

DBCC CHECKIDENT('ExchangeTypes',重新设定种子,7) 去

它再次允许我添加新记录

因此,简言之,我通过添加唯一的复合索引,从而允许显示记录,从而从混乱的数据表中恢复过来

然而,这让我对为什么会发生这种情况感到困惑。我仍然希望能够实现唯一性。也许我会尝试将3个字段连接到一个字段中,看看是否可以通过在单个字段而不是多个字段上使用索引来实现唯一性,看看这是否不会影响数据表的显示


编辑:尝试在单个字段唯一上使用索引,但仍然出现相同的错误。有趣的是,在父查找字段上应用唯一索引并不会阻止datatables工作,但在子表上尝试相同的操作会阻止datatables工作。

EDIT 3看起来可以通过解决方法解决

我从来不知道这会是如此愚蠢的不可预测的,就像这样,我认为它会通过自动增量自行处理,也从来没有想到它会对数据表行显示产生如此令人望而却步的影响,但它看起来的任何方式都可以在初始测试中起作用,除非它以某种方式中断,因为我只使用删除和随后添加记录。祈求好运,不管怎样,这是一个合适的解决方案,除非有人能找到问题的根源并提供更好的解决方案

看起来每次执行删除时我都必须运行这段代码-每次删除后,将最大标识值重置为等于PK.ID列中的当前标识值,如下所示:

DECLARE @maxIdentityETValue INT
DECLARE @maxIdentityFValue INT

SET @maxIdentityETValue = (SELECT MAX(Id) FROM ExchangeTypes)
DBCC CHECKIDENT('ExchangeTypes', RESEED, @maxIdentityETValue)

SET @maxIdentityFValue = (SELECT MAX(Id) FROM Fixtures)
DBCC CHECKIDENT('Fixtures', RESEED, @maxIdentityFValue)

DBCC CHECKIDENT ('ExchangeTypes', NORESEED) 
DBCC CHECKIDENT ('Fixtures', NORESEED)

编辑2未解决

已尝试删除记录,然后添加记录,删除记录后,将不再显示任何后续添加内容:(

请参阅标识生成的ID值中的步骤-这就是问题的原因-至少如果我在删除记录之后和随后添加记录之前没有对这些数字重新设定种子,那么Datatables会显示新记录。但是如果我在删除记录之后和随后添加记录之前没有对它们重新设定种子,则仍然会阻止da从显示记录开始显示,并显示上述错误

让人发疯的-有人请帮帮我


编辑1:解决了。嗯,有点

当添加一个索引(至少是唯一的索引)时,需要为父PK Identity生成的ID值和子PK Identity生成的ID值重新设定种子,以便datatables工作—显示记录时不会出错

别问我为什么,但这很管用

除了分别在索引、父索引和子索引中添加我的唯一强制约束之外,我在按描述重新设置两个标识列的种子后,现在可以向数据库添加新记录,并且datatables可以很好地显示它们