Entity Framework Data Аннотации, эквивалентные .WillCascadeOnDelete(false);

В настоящее время я использую 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; }
}  

Таким образом, я смогу правильно смоделировать миграцию. который закроет отношения внешнего ключа, которые будут каскадом удалены в данный момент.

Любые идеи, кроме использования конфигурации модели?

Ответы

Ответ 1

Нет такого эквивалента. Вы должны использовать свободный API для удаления выборок каскада выборочно или вы должны удалить соглашение OneToManyCascadeDelete, чтобы удалить его по всему миру.

Ответ 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); // <---

Здесь хороший пост о том, как настроить плавные сопоставления, если вам нужна дополнительная информация.