Data annotations 与.WillCascadeOnDelete等效的实体框架数据注释(false);

Data annotations 与.WillCascadeOnDelete等效的实体框架数据注释(false);,data-annotations,entity-framework-4.3,entity-framework-migrations,Data Annotations,Entity Framework 4.3,Entity Framework Migrations,我目前正在使用EF Code First 4.3,启用了迁移,但禁用了自动迁移 我的问题很简单,是否存在与模型配置等效的数据注释 我想修饰我的类,这样外键关系就不会触发级联删除 代码示例: public class Container { public int ContainerID { get; set; } public string Name { get; set; } public virtual ICollection<Output> Output

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

我的问题很简单,是否存在与模型配置等效的数据注释

我想修饰我的类,这样外键关系就不会触发级联删除

代码示例:

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; }
}
这样我就能够正确地构建迁移。它为当前要级联删除的外键关系搭建了框架


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

没有,没有类似的想法。您必须使用fluent API有选择地删除级联删除,或者必须删除
OneToManyCascadeDelete
约定以全局删除它。

创建映射类(fluent语法)并使用以下代码:

// 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); // <---
//将关系“Post”和“User”添加到“Comment”实体
this.HasRequired(t=>t.Post)
.有许多(t=>t.评论)
.HasForeignKey(d=>d.PostID)
.WillCascadeOnDelete(false);//t、 (用户)
.有许多(t=>t.评论)
.HasForeignKey(d=>d.UserID)

.WillCascadeOnDelete(false);// 只需将FK属性设置为null即可防止发生级联删除:

公共int?OutputTypeID{get;set;}
删除OneToManyCascadeDelete约定是否会删除约定,即使您向外键添加了[Required]之类的注释也会删除约定?Cascade delete应仅用于需要的关系,删除此约定将破坏它。可选的只是设置为null。如果使用OneToManyCascadeDelete=false,我如何通过数据注释选择性地启用级联删除?没有内置的等效项,但使用EF 6,您可以编写自己的属性和约定(通过对EF内部成员的一点基于反射的调用)。在这里看到我的答案,它禁用默认级联并使用属性选择返回。您可以通过对约定代码进行一些小的调整来实现相反的结果:有相同的问题。找到了如何启用它,但我只想为一个关系禁用它。链接已断开。
// 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); // <---