It Parmits = 0 , тогда как это должно быть parent.id , который является -HQid
EF Core не любит parent.id , объявляется как значение. Один. />> Выпуск: < /p>
Код: Выделить всё
[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>
В застройке модели у меня есть следующие определения < /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>
Когда сущность сохраняется, существует триггер, который обновляет родительский идентификатор -Hqid. < /p>
Это этот триггер: < /p>
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
Подробнее здесь: https://stackoverflow.com/questions/796 ... er-generat