2015-04-17 66 views
1

我有一个实体像下面,实体框架级联中的一个零或一对一的关系

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记录,当我删除用户的用户表。

gooling之后,我发现了一些这样的事,

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); 
     } 

而且我的仓库代码删除用户低于,

protected override void OnDelete(int id) 
      { 

       var user = EntitySet.Include(x=>x.UserSecurity).FirstOrDefault(x => x.ID == id); 
       EntitySet.Remove(user); 
       DbContext.Entry(user).State = EntityState.Deleted; 
      } 

保存更改后,用户记录只得到删除不是用户安全记录。

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

回答

2

您正在配置您的EPDUser为关系中的依赖实体。所以一个EPDUser有一个EPDSecurity的外键,如果你删除了相关的EPDSecurity,它将被删除,但不是相反。你想要做的是使用WithOptionalPrincipal,其中设置实体被配置为关系中的主体:

modelBuilder.Entity<EPDUser>() 
    .HasOptional(x => x.UserSecurity) 
    .WithOptionalPrincipal() 
    .WillCascadeOnDelete(true); 
+0

嗨阿萨德,你是礼仪。当我提到上述行时,已经创建了一个名为“EPDUser_ID”的新列,并在此处更新了相应的用户标识。当我删除用户时,它也会删除用户安全表。 感谢您的回复。 – Karthikeyan