I have this scenario: I have these classes:
public class A
{
public int Id {get;set;}
public virtual ICollection<B> bCollection {get; set; }
}
public class B
{
public int Id {get;set;}
}
public class C1 : BaseClass1
{
public int Id{get;set;}
public virtual B B{get;set;}
}
public class C2 : BaseClass2
{
public int Id {get;set;}
public virtual B B {get;set;}
}
...
public class C100 : BaseClass100
{
public int Id {get;set;}
public virtual B B {get;set;}
}
类A拥有类B的集合,而类Ci只有一个类B和不同的基类。当在类A的集合中只有B没有被Ci引用时,我可以删除类A并且所有的B集合也会被级联删除。但是,当在类A的集合中有被类Ci引用的B时,我不能删除类A的实例...
我的期望行为:
类A将被删除以及它所拥有的所有B集合。如果类Ci引用了其中的某些B,则在删除结束时它们将变为空(null)。(类Ci的实例将不会被删除!)我也不想遍历所有的Ci类来查看它是否引用了需要删除的B集合。
我不希望使用这段代码:
MyDbContext db=new MyDbContext();
Hash<int> bCollectionToDelete=GetBCollectionToDeleteHashSet();
var C1_db_collection= db.C1Collection.ToList();
foreach(var c1Item in C1Collection)
{
if(bCollectionToDelete.Contains(c1Item.refrenceIdToB)
{
c1Item.refrenceIdToB=null;
}
}
var C2_db_collection= db.C2Collection.ToList();
foreach(var c2Item in C1Collection)
{
if(bCollectionToDelete.Contains(c2Item.refrenceIdToB)
{
c2Item.refrenceIdToB=null;
}
}
...
var C100_db_collection= db.C100Collection.ToList();
foreach(var c100Item in C100Collection)
{
if(bCollectionToDelete.Contains(c100Item.refrenceIdToB)
{
c100Item.refrenceIdToB=null;
}
}
有人知道如何实现吗?
Ci
类中,是否可能将外键可空设置为B
? - Mat JOn Delete Set Null
吗? - Mat J