Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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
C# EF核心:级联删除的多对多关系_C#_.net_Entity Framework_Entity Framework Core - Fatal编程技术网

C# EF核心:级联删除的多对多关系

C# EF核心:级联删除的多对多关系,c#,.net,entity-framework,entity-framework-core,C#,.net,Entity Framework,Entity Framework Core,我正在使用EF Core(代码优先)进行一个.NET Core项目。我正在构建一个API来学习这个框架 总之,该应用程序将允许用户粘贴代码并与其他用户共享。 因此,我有两个主要实体: 使用者 列表项 代码页 public sealed class User : Entity<Guid> { /// <summary> /// Le nom d'utilisateur de l'utilisateur /// &

我正在使用EF Core(代码优先)进行一个.NET Core项目。我正在构建一个API来学习这个框架

总之,该应用程序将允许用户粘贴代码并与其他用户共享。 因此,我有两个主要实体:

  • 使用者
  • 列表项
代码页

 public sealed class User : Entity<Guid>
    {
        /// <summary>
        /// Le nom d'utilisateur de l'utilisateur
        /// </summary>
        public string Username { get; private set; }

        /// <summary>
        /// Le hash du mot de passe de l'utilisateur
        /// </summary>
        public byte[] PasswordHash { get; private set; }

        /// <summary>
        /// Le salt du mot de passe de l'utilisateur
        /// </summary>
        public byte[] PasswordSalt { get; private set; }

        /// <summary>
        /// Liste de pages de code dont l'utilisateur est proprietaire
        /// </summary>
        public ICollection<CodePage> OwnedCodePages { get; private set; }

        /// <summary>
        /// Association User/Page autorisées
        /// </summary>
        public ICollection<UserCodePage> UserCodePages { get; private set; }
    ...
}

以及实体配置:

internal class UserCodePage : BaseEntityTypeConfiguration<Identity.Entities.UserCodePage>
    {
        public override void Configure(EntityTypeBuilder<Identity.Entities.UserCodePage> builder)
        {
            builder.HasKey(o => new { o.AuthorizedUserId, o.CodePageId });

            builder
                .HasOne(o => o.AuthorizedUser)
                .WithMany(o => o.UserCodePages)
                .HasForeignKey(o => o.AuthorizedUserId)
                .OnDelete(DeleteBehavior.Restrict);



            builder
                .HasOne(o => o.CodePage)
                .WithMany(o => o.UserCodePages)
                .HasForeignKey(o => o.CodePageId)
                .OnDelete(DeleteBehavior.Restrict);

        }
内部类UserCodePage:BaseEntityTypeConfiguration
{
公共覆盖无效配置(EntityTypeBuilder)
{
HasKey(o=>new{o.AuthorizedUserId,o.CodePageId});
建设者
.HasOne(o=>o.duser)
.WithMany(o=>o.UserCodePages)
.HasForeignKey(o=>o.AuthorizedUserId)
.OnDelete(DeleteBehavior.Restrict);
建设者
.HasOne(o=>o.CodePage)
.WithMany(o=>o.UserCodePages)
.HasForeignKey(o=>o.CodePageId)
.OnDelete(DeleteBehavior.Restrict);
}
我添加了
OnDelete(DeleteBehavior.Restrict)
,因为没有它我无法
更新数据库

问题是: 如果
用户
或链接到它的
代码页
被删除,我希望删除
用户代码页
。 我试图使用
删除行为.Cascade
但是
更新数据库
失败


我希望您理解我的问题!

它是否说明了在使用更新数据库时失败的原因?我看到您的
代码页
中有第三个关系称为
UserCodePage
。如果这另一个关系依赖于它,则您无法删除它,因为外键失败。另一个关系是用户对代码页上的一对多关系。(一个代码页有一个所有者,一个用户有多个拥有的代码页)我的意思是确切的错误?如果您可以提供,我的计算机上没有我,但这是这样的:表上的外键约束可能会导致循环或多个级联路径,这意味着您必须将另一个关联配置为
删除行为.Restrict
public class UserCodePage : BaseEntity
    {

        public Guid AuthorizedUserId { get; private set; }
        public User AuthorizedUser { get; set; }
        public Guid CodePageId { get; private set; }
        public CodePage CodePage { get; set; }

        public UserCodePage()
        {
        }

        public UserCodePage(Guid userId, User user, Guid codePageId, CodePage codePage)
        {
            AuthorizedUserId = userId;
            AuthorizedUser = user;
            CodePageId = codePageId;
            CodePage = codePage;
        }
    }
internal class UserCodePage : BaseEntityTypeConfiguration<Identity.Entities.UserCodePage>
    {
        public override void Configure(EntityTypeBuilder<Identity.Entities.UserCodePage> builder)
        {
            builder.HasKey(o => new { o.AuthorizedUserId, o.CodePageId });

            builder
                .HasOne(o => o.AuthorizedUser)
                .WithMany(o => o.UserCodePages)
                .HasForeignKey(o => o.AuthorizedUserId)
                .OnDelete(DeleteBehavior.Restrict);



            builder
                .HasOne(o => o.CodePage)
                .WithMany(o => o.UserCodePages)
                .HasForeignKey(o => o.CodePageId)
                .OnDelete(DeleteBehavior.Restrict);

        }