Entity framework级联一对零或一对一关系
Entity framework cascade one to zero or one relationship
我有一个像下面这样的实体,
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;}
}
我正在使用 entity framework 6.1.3
当我从 User table.
中删除用户时,我需要删除 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);
}
下面是我删除用户的存储库代码,
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;
}
保存更改后,只会删除用户记录,不会删除 UserSecurity 记录。
Kinldy帮我在删除用户的时候删除了UserSecurity记录。
提前致谢
您正在将 EPDUser
配置为关系中的依赖实体。所以 EPDUser
有一个指向 EPDSecurity
的外键,如果你删除关联的 EPDSecurity
就会被删除,但反之则不然。您想要做的是使用 WithOptionalPrincipal
,它将配置的实体设置为关系中的主体:
modelBuilder.Entity<EPDUser>()
.HasOptional(x => x.UserSecurity)
.WithOptionalPrincipal()
.WillCascadeOnDelete(true);
我有一个像下面这样的实体,
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;}
}
我正在使用 entity framework 6.1.3 当我从 User table.
中删除用户时,我需要删除 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);
}
下面是我删除用户的存储库代码,
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;
}
保存更改后,只会删除用户记录,不会删除 UserSecurity 记录。
Kinldy帮我在删除用户的时候删除了UserSecurity记录。 提前致谢
您正在将 EPDUser
配置为关系中的依赖实体。所以 EPDUser
有一个指向 EPDSecurity
的外键,如果你删除关联的 EPDSecurity
就会被删除,但反之则不然。您想要做的是使用 WithOptionalPrincipal
,它将配置的实体设置为关系中的主体:
modelBuilder.Entity<EPDUser>()
.HasOptional(x => x.UserSecurity)
.WithOptionalPrincipal()
.WillCascadeOnDelete(true);