根据我对几个帖子的理解,使用共享主键时,使用EF的TPT架构不会创建必要的ON DELETE CASCADE ....还有人说,EF上下文将处理删除子的正确顺序-classed表(但我得到一个错误,它打破了约束,我可以通过在子类表上添加ON DELETE CASCADE来修复它)...
更多背景信息......
我有一个Section类,它有一个数字,标题和一个页面列表.该页面使用一个包含基本页面属性的超类来设计.我有大约10个以上的页面类子类.Section类包含这些页面的ICollection.除了在子类表上没有ON DELETE CASCADE之外,DB正确创建.
我的代码将创建实体并添加到数据库中.但是,如果我尝试删除一个部分(或所有部分),由于我的子类页面表上的FK约束,它无法删除...
public abstract BaseContent
{
... common properties which are Ignored in the DB ...
}
public class Course : BaseContent
{
public int Id {get;set;}
public string Name {get;set;}
public string Descripiton {get;set;}
public virtual ICollection<Chapter> Chapters{get;set;}
...
}
public class Chapter : BaseContent
{
public int Id {get;set;}
public int Number {get;set;}
public string Title {get;set;}
public virtual Course MyCourse{get;set;}
public virtual ICollection<Section> Sections{get;set;}
...
}
public class …Run Code Online (Sandbox Code Playgroud) 我使用EF代码优先和TPT(每类型表)继承.我有以下型号:
public partial class AccountHolder
{
public int AccountHolderId { get; set; }
public virtual Address Detail { get; set; }
public virtual Nominee Nominee { get; set; }
}
public partial class Nominee
{
public int NomineeId { get; set; }
}
public abstract class Address
{
public int AddressId { get; set; }
...
}
public class PersonalDetail : Address
{
public int PersonalDetailId { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
流利的api:
modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Nominee)
.WithRequired()
.WillCascadeOnDelete();
Run Code Online (Sandbox Code Playgroud)
根据本教程, …
我正在尝试在我的数据模型(实体框架6,代码优先方法)中实现异构关联.
我有一个现有的类结构,让我们称之为Tree,Branch和Leaf.A Tree可以有许多Branch对象,并且Branch可以包含许多Leaf对象.三个级别之间的关系具有cascade-delete行为(删除分支,您还删除叶子等).
现在,我试图让用户在每个级别上添加类似注释的对象.我有一些与数据建模有关的问题,因为我希望3种实体类型中的每一种都能够有很多注释,每条注释都属于一个且只有一个条目.我也希望所有评论都在同一张表中.我尝试了两种不同的方法:
实现继承使得Comment(摘要)可以是一个TreeComment,BranchComment或者LeafComment,下面的每层次结构表(TPH)的方法(如看到的那样,例如,在这里),其具有一个抽象类(的Comment征求意见),然后将其导出到TreeComment,BranchComment等这是通过编码这样的模型来实现的:
public abstract class Comment
{
// ID
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
}
public class TreeComment: Comment
{
// Foreign Keys
public Guid TreeID { get; set; }
// Navigation Properties
public virtual Tree …Run Code Online (Sandbox Code Playgroud)