EF CORE: Child's Composite Fremd Key, nicht aktualisiert mit der auslösern erzeugten ID des Elternteils in einzelnen SavC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 EF CORE: Child's Composite Fremd Key, nicht aktualisiert mit der auslösern erzeugten ID des Elternteils in einzelnen Sav

Post by Anonymous »

Wie man EF -Kern verwendet, um einen zusammengesetzten Fremdschlüssel zu verwalten, der einen übergeordneten Datensatz bezieht, dessen ID nach dem Insertion durch einen Datenbankauslöser generiert wird? Richtig
Its der Ansicht, dass der ParentID = 0 ist, während es übergeordnet sein sollte. Iid , das ist -hqid
EF Core nicht mag die Elternschaft. Iid wird als ValueGeneratedonadd () , weil HQID die primäre Schlüssel ist. /> Es sei denn, es gibt eine Möglichkeit, ValueGeneratedonadd () für die Eltern zu verwenden. ID und EF -Kern nicht als Identitätsspalte behandeln. Wert Wie der Datensatz wird in eine Remote-Datenbank repliziert, in der ein neuer ID-Wert (der eine Identität aus der Remote-Datenbank ist).

Code: Select all

[Index(nameof(ID), nameof(FwDbID), IsUnique = true)]
public class Parent
{
[Key]]
public int HqID { get; set; }
public int ID { get; set; }
public int FwDbID { get; set; }

public List Children { get; set; } = [];
}

public class Child
{
[Key]]
public int HqID { get; set; }
public int ID { get; set; }
public int FwDbID { get; set; }

public int ParentID { get; set; }
public Parent Parent { get; set; }
}
< /code>
Im Modellbuilder habe ich die folgenden Definitionen < /p>
modelBuilder.Entity
()
.Property(p => p.HqID)
.ValueGeneratedOnAdd();

modelBuilder.Entity()
.Property(p => p.ID)
.ValueGeneratedOnAdd();

modelBuilder.Entity()
.HasOne(c => c.Parent) // Child has one Parent
.WithMany(p => p.Children) // Parent has many Children
.HasForeignKey(c => new { c.ParentID, c.FwDbID }) // Composite foreign key in Child
.HasPrincipalKey(p => new { p.ID, p.FwDbID }); // Composite primary key in Parent
< /code>
Wenn die Entität gespeichert ist, gibt es einen Auslöser, der die übergeordnete ID aktualisiert.SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[SyncTriggerInsertParent]
ON [dbo].[Parent]
AFTER INSERT
AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM INSERTED)
RETURN

IF EXISTS (SELECT 1 FROM DELETED)
RETURN  --is this is an update trigger if so exit

SET NOCOUNT ON;

UPDATE IT
SET ID = - IT.HqID
FROM Parent IT
INNER JOIN INSERTED I ON IT.HqID = I.HqID
WHERE I.ID IS NULL OR I.ID = 0
END
Vielen Dank im Voraus für jede Hilfe

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post