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