EF4.1 Code First: Как отключить каскад удаления для связи без свойства навигации в зависимой сущности

Допустим, у меня есть эти две очень простые сущности:

public class ParentEntity
{
   public int Id;
   public virtual ICollection<ChildEntity> Childrens;
}

public class ChildEntity
{
   public int Id;
   public int ParentEntityId; // Foreign Key
   public virtual ParentEntity parent; // [NOTWANTED]
}

По некоторым причинам я не хочу, чтобы ChildEntity содержал обратную ссылку на своего родителя. Я просто хочу, чтобы он сохранил идентификатор ParentEntity, но не более того. До сих пор никаких проблем, я просто удаляю строку [НЕЖЕЛАТЕЛЬНО], и все работает как положено.

Моя проблема заключается в следующем: как отключить каскадное удаление в этом конкретном случае?

Если бы у меня все еще было родительское свойство навигации, это было бы так просто, как:

modelBuilder.Entity<ChildEntity>()
    .HasRequired(c => c.parent)
    .WithMany(p => p.Childrens)
    .WillCascadeOndelete(false)

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

Что я сделал прямо сейчас, так это установил внешний ключ как int, допускающий значение NULL, чтобы отключить каскад при удалении, но это некрасиво:

public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete

Как я могу заставить его работать с Fluent API? Думаю, это должно быть возможно.

16
задан Cœur 3 September 2017 в 11:40
поделиться