提供有关级联删除的顺序/顺序的实体框架提示

时间:2011-07-05 20:57:09

标签: entity-framework

我正在做一个代码优先的EF方法,除了我正在管理数据库这一事实(对于我认为仍然存在于代码优先的模式更改问题)。我有以下表/模型对象(除了几个参数等):

class A {
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public virtual List<B> BList {get;set;}
public virtual List<C> CList  {get;set;}
}

class B {
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("A"), Required]
public int AId {get; set;}
public virtual A parent {get;set;}
public virtual List<D> DList {get;set;}
}

class C {
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("A"), Required]
public int AId {get;set;}
[ForeignKey("someD"), Required]
public int someDId {get;set}
public virtual D someD
}

class D {
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("B"), Required]
public int BId {get;set;}
public string data {get;set;}
}

除此之外还有更多内容,但我的想法是,从父对象A,我可以沿着两个不同的关系导航到D.设置数据库中的级联删除关系,使得A-> B,A-> C和B-> D级联; C-> D是'无动作'。

因此,当我去删除A(DbSet.Remove(a); SaveChanges();等)时,EF需要先删除C分支,以便以后删除D并且不违反FK约束C - &GT; d。但是,它似乎是选择其他路径,因为删除会抛出有关违反所述约束的异常。有没有办法让我向EF提供一个提示(属性或其他)来告诉它关于这些关系的其他信息,以便它能以正确的顺序删除东西?

修改为代码中的方法添加了更多清晰度;此外,这个想法发生在我身上:我没有明确地从D-末端的C-> D中捕捉到关系 - 也就是说,D上没有指向C的导航属性;因为C是每个类型的方案的一部分,并不是所有的D都指向C的基类的良好集合。我是否需要在D中使用某种导航属性返回C以获取EF以了解我的需求?

0 个答案:

没有答案