"Kann keinen expliziten Wert für die Identitätsspalte in die Tabelle einfügen, wenn IDENTITY_INSERT auf OFF gesetzt ist" mit zusammengesetztem Schlüssel

Wir haben kürzlich eine neue "Ebene" zu unserer Datenbank hinzugefügt - einen Schlüssel "Company_ID" hinzugefügt, der über / vor dem vorhandenen ID-Identitätsfeld in den Tabellen in der gesamten Datenbank steht.

Wenn eine Tabelle beispielsweise ID und Felder hatte, hat sie jetzt Company_ID, dann ID und dann die Felder. Die Idee ist, dass ID für jeden anderen Company_ID-Wert, der für die Funktionalität bereitgestellt wird, automatisch erhöht werden kann (Company_ID 1 kann ID 1, 2, 3 usw. haben; Company_ID 2 kann ID 1, 2, 3 usw. haben).

Das Auto-Inkrement-Feld bleibt als ID erhalten. Eine Beispieltabelle ist:

    [dbo].[Project](
      [Company_ID] [int] NOT NULL,
      [ID] [int] IDENTITY(1,1) NOT NULL,
      [DescShort] [varchar](100) NULL,
      [TypeLookUp_ID] [int] NULL,
      [StatusLookUp_ID] [int] NULL,
      [IsActive] [bit] NOT NULL,
    CONSTRAINT [PK_Project] PRIMARY KEY CLUSTERED 
    (
      [Company_ID] ASC,
      [ID] ASC
    )

Bevor die Company_ID eingeführt wurde, füllten wir einfach die Felder DescShort, TypeLookUp_ID, StatusLookUp_ID und IsActive aus, um eine ERSTELLUNG durchzuführen, und ließen die ID so, wie sie standardmäßig war, möglicherweise 0.

Der Datensatz wurde erfolgreich gespeichert und die ID wurde automatisch von der Datenbank ausgefüllt und dann zum Ausführen einer SHOW über eine Ansicht usw. verwendet.

Jetzt möchten wir jedoch Company_ID auf einen bestimmten Wert setzen, ID belassen und die Felder wie zuvor ausfüllen.

    _db.Project.Add(newProject);
    _db.SaveChanges();

Ja, wir möchten den Company_ID-Wert angeben. Wir möchten, dass die ID wie zuvor automatisch ausgefüllt wird. Wir erhalten die Fehlermeldung:

Es kann kein expliziter Wert für die Identitätsspalte in die Tabelle "Project" eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist

Wird dies durch die Angabe der Company_ID oder durch das ID-Feld verursacht? Wissen Sie, wie wir dieses Problem beheben können?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage