实体框架数据注释等效于.WillCascadeOnDelete(false);

时间:2012-05-03 13:04:34

标签: data-annotations entity-framework-4.3 ef-migrations

我目前正在使用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; }
}  

这样我就可以正确地构建迁移。目前支持级联删除的外键关系。

除了使用模型配置以外的任何想法?

3 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分: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); // <---

如果您需要更多信息,这里有一个关于如何设置流畅映射的nice post

答案 2 :(得分:0)

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

public int? OutputTypeID { get; set; }