16

我目前正在使用启用了迁移的 EF Code First 4.3,但禁用了自动迁移。

我的问题很简单,是否有相当于模型配置的数据注释 .WillCascadeOnDelete(false)

我想装饰我的班级,以便外键关系不会触发级联删除。

代码示例:

public class Container
{
    public int ContainerID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Output> Outputs { get; set; }
}

public class Output
{
    public int ContainerID { get; set; }
    public virtual Container Container { get; set; }

    public int OutputTypeID { get; set; }
    public virtual OutputType OutputType { get; set; }

    public int Quantity { get; set; }
}  

public class OutputType 
{
    public int OutputTypeID { get; set; }
    public string Name { get; set; }
}

我想做这样的事情:

public class Output
{
    [CascadeOnDelete(false)]   
    public int ContainerID { get; set; }
    public virtual Container Container { get; set; }

    [CascadeOnDelete(false)]    
    public int OutputTypeID { get; set; }
    public virtual OutputType OutputType { get; set; }

    public int Quantity { get; set; }
}  

这样我就可以正确地为迁移搭建脚手架。它将外键关系架设在此刻被级联删除。

除了使用模型配置之外,还有什么想法吗?

4

3 回答 3

19

不,没有这样的等价物。您必须使用 fluent API 选择性地删除级联删除,或者您必须删除OneToManyCascadeDelete约定以全局删除它。

于 2012-05-03T13:16:09.903 回答
2

创建一个映射类(流畅的语法)并使用以下代码:

// add relationships "Post" and "User" to a "Comment" entity
this.HasRequired(t => t.Post)
    .WithMany(t => t.Comments)
    .HasForeignKey(d => d.PostID)
    .WillCascadeOnDelete(false); // <---

this.HasOptional(t => t.User)
    .WithMany(t => t.Comments)
    .HasForeignKey(d => d.UserID)
    .WillCascadeOnDelete(false); // <---

如果您需要更多信息,这是一篇关于如何设置流畅映射的好帖子。

于 2012-05-31T02:56:39.957 回答
0

只需将 FK 属性设为可空即可防止发生级联删除:

public int? OutputTypeID { get; set; }
于 2018-03-07T05:47:19.083 回答