C# EF核心Sql执行顺序需要更改

C# EF核心Sql执行顺序需要更改,c#,asp.net-core,.net-core,entity-framework-core,C#,Asp.net Core,.net Core,Entity Framework Core,我有两个由外键关联的表。外键可以为null,因此不需要关系。这种关系也是一对一的。以下是EF模型的定义 public class SignTypeLink { [Key] public int Id { get; set; } public int Quantity { get; set; } [ForeignKey("ImageId")] public Image Image { get; set; }

我有两个由外键关联的表。外键可以为null,因此不需要关系。这种关系也是一对一的。以下是EF模型的定义

    public class SignTypeLink
    {
    [Key]    
    public int Id { get; set; }
    public int Quantity { get; set; }
    [ForeignKey("ImageId")]
    public Image Image { get; set; }
    }
    public class Image
    {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]    
    [Key]
    public int Id { get; set; }
    public string ImagePath { get; set; }
    [ForeignKey("Id")]
    public SignTypeLink SignTypeLink { get; set; }
    }

            builder.Entity<EF.Sign>()
                .HasOne(stl => stl.Image)
                .WithOne()
                .HasForeignKey<EF.Sign(stl => stl.ImageId)
                .HasPrincipalKey<EF.Image>(pi => pi.Id);


此sql由于约束而失败。我的问题是EF core为什么选择这个订单。如果这些sql语句被颠倒,我们都会很好。

你给我们看一下(3)的代码怎么样?其中一个FK是冗余的(一对一只需要一个FK)。使用所提供的模型,您已经创建了2个循环关系,因此存在所有问题。如果需要一对一,请选择主体角色和从属角色并删除其中一个FK。删除第二个外键会导致相同的错误。公共类映像{[DatabaseGenerated(DatabaseGeneratedOption.Identity)][Key]公共int-Id{get;set;}公共字符串映像路径{get;set;}
DELETE FROM [Myschema].[Image]
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;

UPDATE [Myschema].[Sign] SET [Quantity] = @p2, [ImageId] = @p3
WHERE [Id] = @p4;
SELECT @@ROWCOUNT;