2

Es ist eine sehr einfache Struktur - Eltern Kind mit Fremdschlüssel 1 zu viele.Das Hinzufügen eines eindeutigen Index in Entity Framework verhindert, dass DataTables funktioniert

funktionierte gut, aber ich wollte Eindeutigkeit erzwingen, indem sie als so einen Verbund eindeutigen Index hinzu:

CreateIndex("dbo.Fixtures", new[] { "MarketId", "BookName", "CoupName" }, unique: true, name: "IX_UniqueFixture"); 

Danach, wenn ich neue Datensätze eingegeben es den Fehler erzeugt hat: enter image description here

ich dann gelöscht der neu hinzugefügte Index und löschte die Datensätze, die hinzugefügt wurden, nachdem der Index hinzugefügt wurde, und es funktionierte, die Datensätze anzuzeigen, die dem Hinzufügen des Index vorausgingen.

Allerdings, wenn ich wieder versucht, die Datenbank mit neuen Datensätze aktualisieren sie auf den gleichen Fehler rückgängig gemacht:

enter image description here

Die Datensätze unterhalb der Fehlermeldung die Datensätze angezeigt, die von vor der Zugabe bestand der Index zuvor erwähnt.

nun die Eltern Lookup-Tabelle Id-Spalte als so nach Einsaat - es funktioniert

USE [aspnet-Arb-20160906102730] 


DBCC CHECK ('ExchangeTypes', RESEED, 7) GO GO

und es wieder erlaubt ich neuen Datensätze So hinzufügen

enter image description here

in Kurz habe ich es geschafft, mich von dem Durcheinandermachen der Databases durch Hinzufügen des einzigartigen zusammengesetzten Indexes zu erholen, so dass es die Anzeige von Datensätzen ermöglicht.

Allerdings verwirrt mich, warum dies auftritt. Und ich möchte immer noch Einzigartigkeit durchsetzen können. Vielleicht werde ich versuchen, 3 Felder in ein Feld zu verketten und zu sehen, ob es mir gelingt, die Eindeutigkeit mit einem Index für ein einzelnes Feld und nicht mit mehreren Feldern durchzusetzen und zu sehen, ob dies die Anzeige von Databases beeinträchtigt.

EDIT: Versucht es mit Index auf einzelnes Feld eindeutig und es kommt immer noch mit dem gleichen Fehler. Funny, wie das Anwenden eines eindeutigen Indexes auf das Eltern-Nachschlagefeld nicht verhindert, dass Databases funktioniert, aber dasselbe in der Kind-Tabelle versucht.

Antwort

0

EDIT 3 Sieht aus wie könnten mit Abhilfe GELÖST

Ich wusste nie, wie dies so dumm unberechenbar sein könnte denken, es wäre nur für sich selbst sorgen mit der Autoinkrement und hätte nie gedacht, es wäre eine solche prohibitive Wirkung haben auf Datatables-Zeilen angezeigt, aber wie es aussieht, könnte dies beim ersten Testen funktionieren, es sei denn, es bricht irgendwie, da ich es nur einmal mit dem Löschen und dem nachfolgenden Hinzufügen von Datensätzen getestet habe. Daumen drücken, es ist sowieso eine geeignete Arbeit, es sei denn, jemand kann dem auf den Grund gehen und eine bessere Lösung anbieten.

Sieht so aus, als müsste ich diesen Code jedes Mal ausführen, wenn ich einen Löschvorgang durchführe - den maximalen Identitätswert auf den aktuellen Identitätswert im PK zurücksetzen.ID-Spalte nach jedem Löschen wie folgt:

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) 

EDIT 2 nicht gelöst.

Versuchte löschen und dann Datensätze hinzufügen und weiter zu löschen, würde nicht erlauben, dass nachfolgende Ergänzungen mehr angezeigt werden. :(

Sieh den Schritt in Identity generierte ID-Werte - das ist, was das Problem verursacht - na ja, zumindest wenn ich diese Nummern nach dem Löschen nicht neu seed und bevor anschließend Datensätze hinzufügen Datatables zeigt die neuen Datensätze. Aber wenn ich nicht neu seed ., sie weiter zu Löschen von Datensätzen und bevor anschließend Hinzufügen von Datensätzen es noch Datentabellen aus Anzeigen der Datensätze und zeigt die obige Fehler verhindert

Maddening - jemand bitte helfen sie mir

enter image description here


! 0

EDIT 1: Gelöst. So in etwa.

Wenn ein Index hinzugefügt wird, also zumindest ein eindeutiger Index, ist es notwendig, sowohl die Eltern- als auch die untergeordneten PK Identity generierten ID-Werte neu zu seeden, damit die Daten fehlerfrei funktionieren.

Frag mich nicht warum, aber es funktioniert einfach.

Zusätzlich zum Hinzufügen meiner eindeutigen Erzwingungsbeschränkungen in den Indizes, Eltern bzw. Kind, ich nach dem Neuauslesen beider Identitätsspalten wie beschrieben, bin ich jetzt in der Lage, neue Datensätze zur Datenbank hinzuzufügen, und Datatables zeigt sie fein an.

Verwandte Themen