C# 实体框架级联一对零或一关系

C# 实体框架级联一对零或一关系,c#,entity-framework,repository-pattern,C#,Entity Framework,Repository Pattern,我有一个如下的实体 class User { public int Id {get;set;} public string Name {get;set;} public int? UserSecurityId {get;set;} public virtual UserSecurity UserSecurity {get;set;} } class UserSecurity { public int

我有一个如下的实体

class User
    {
         public int Id {get;set;}
         public string Name {get;set;}

         public int? UserSecurityId {get;set;}
         public virtual UserSecurity UserSecurity {get;set;}

    }

class UserSecurity
{
  public int Id {get;set;}

  public int? AdminRoleId{get;set;}
  public virtual Admin AdminRole {get;set;}

  public int? ApproverRoleId {get;set;}
  public virtual TaskApprover ApproverRole {get;set;}
}

class Admin
{
  public int Id {get;set;}
  public string Name {get;set;}
}

class TaskApprover
{ 
   public int Id {get;set;}
   public string Name {get;set;}
}
我使用的是实体框架6.1.3 从用户表中删除用户时,我需要删除UserSecurity记录

用谷歌搜索后,我发现了这样的东西

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //// Cascade delete, The foreign key table records will be removed when its parent deleted.
            modelBuilder.Entity<EPDUser>().HasOptional(x => x.UserSecurity).WithOptionalDependent().WillCascadeOnDelete(true);
            modelBuilder.Entity<EPDUserSecurity>().HasOptional(x => x.AdminRole).WithOptionalDependent().WillCascadeOnDelete(true);
            modelBuilder.Entity<EPDUserSecurity>().HasOptional(x => x.ApproverRole).WithOptionalDependent().WillCascadeOnDelete(true);
            base.OnModelCreating(modelBuilder);
        }
保存更改后,只删除用户记录,而不删除UserSecurity记录

Kinldy在删除用户时帮助我删除用户安全记录。
提前感谢

您正在将您的
EPDUser
配置为关系中的从属实体。因此,
EPDUser
有一个指向
EPDSecurity
的外键,如果您删除相关的
EPDSecurity
,它将被删除,而不是相反。您要做的是将
与OptionalPrincipal一起使用,它将要配置的实体设置为关系中的主体:

modelBuilder.Entity<EPDUser>()
    .HasOptional(x => x.UserSecurity)
    .WithOptionalPrincipal()
    .WillCascadeOnDelete(true);
modelBuilder.Entity()
.has可选(x=>x.UserSecurity)
.WithOptionalPrincipal()
.WillCascadeOnDelete(真);

Hi Asad,你是rite。当我提到上面这一行时,已经创建了一个名为“EPDUser_ID”的新列,并在这里更新了相应的用户ID。当我删除用户时,它也会删除usersecurity表。谢谢你的回复。
modelBuilder.Entity<EPDUser>()
    .HasOptional(x => x.UserSecurity)
    .WithOptionalPrincipal()
    .WillCascadeOnDelete(true);