Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 外键约束可能导致循环或多个级联路径_Entity Framework_Asp.net Core_Entity Framework Core_Ef Fluent Api - Fatal编程技术网

Entity framework 外键约束可能导致循环或多个级联路径

Entity framework 外键约束可能导致循环或多个级联路径,entity-framework,asp.net-core,entity-framework-core,ef-fluent-api,Entity Framework,Asp.net Core,Entity Framework Core,Ef Fluent Api,我得到以下错误外键约束可能导致.NET核心项目中的迁移出现循环或多个级联路径。我有以下3个标识: public class Post { [Key] public long Id { get; set; } [Required] public long UserID { get; set; } public virtual ApplicationUser User { get; set; } ..

我得到以下错误
外键约束可能导致.NET核心项目中的迁移出现循环或多个级联路径。我有以下3个标识:

public class Post
{
        [Key]
        public long Id { get; set; }

        [Required]
        public long UserID { get; set; }
        public virtual ApplicationUser User { get; set; }

        ...
}

public class Album
{
        [Key]
        public long Id { get; set; }

        [Required]
        public long UserID { get; set; }
        public virtual ApplicationUser User { get; set; }

        ...
}

public class PostAlbum
{
        public long PostID { get; set; }
        public virtual Post Post { get; set; }

        public long AlbumID { get; set; }
        public virtual Album Album { get; set; }
}
我正在使用fluent api映射实体PostAlbum的外键:

builder.Entity<PostAlbum>(x =>
{
                x.HasKey(y => new { y.PostID, y.AlbumID });
                x.HasOne(y => y.Post).WithMany().HasForeignKey("PostID").OnDelete(DeleteBehavior.Cascade);
                x.HasOne(y => y.Album).WithMany().HasForeignKey("AlbumID").OnDelete(DeleteBehavior.Cascade);
});
builder.Entity(x=>
{
x、 HasKey(y=>new{y.PostID,y.AlbumID});
x、 HasOne(y=>y.Post).WithMany().HasForeignKey(“PostID”).OnDelete(DeleteBehavior.Cascade);
x、 HasOne(y=>y.Album).WithMany().HasForeignKey(“AlbumID”).OnDelete(DeleteBehavior.Cascade);
});
逻辑是:一篇文章可以存储在许多相册中,而一本相册可以有许多文章

问题是,如果我将DeleteBehavior更改为DeleteBehavior.Restrict,我将无法删除Post实体,因为它与PostAlbum的外键冲突

错误:


有人能帮我吗?

这种型号应该没问题。您没有遗漏其他关系吗?@GertArnold帖子和相册通过属性public long UserID{get;set;}与ApNetUsers建立了关系。我已经更新了这个问题的模型。这会导致一个周期用户相册PostAlbum Post User。您必须在此循环中从其中一个FK中删除级联删除。@GertArnold当我使用x.HasOne(y=>y.Post)时。WithMany().HasForeignKey(“postd”).OnDelete(DeleteBehavior.Cascade)在删除帖子、删除帖子时应用级联,或者在删除帖子时应用级联?否,只有删除帖子才能删除邮件。但SQLServer不想决定在删除用户时,Post或Album是否应该负责删除PostAlbums。如果SQL Server愿意付出努力,这个周期很容易解决,但不幸的是,它没有(我没有发明它…),这个模型不应该是个问题。您没有遗漏其他关系吗?@GertArnold帖子和相册通过属性public long UserID{get;set;}与ApNetUsers建立了关系。我已经更新了这个问题的模型。这会导致一个周期用户相册PostAlbum Post User。您必须在此循环中从其中一个FK中删除级联删除。@GertArnold当我使用x.HasOne(y=>y.Post)时。WithMany().HasForeignKey(“postd”).OnDelete(DeleteBehavior.Cascade)在删除帖子、删除帖子时应用级联,或者在删除帖子时应用级联?否,只有删除帖子才能删除邮件。但SQLServer不想决定在删除用户时,Post或Album是否应该负责删除PostAlbums。如果SQL Server愿意付出努力,那么这个循环很容易解决,不幸的是,它没有(我没有发明它…)。