EF4.1 代码优先:如何为依赖实体中没有导航属性的关系禁用删除级联 [英] EF4.1 Code First : How to disable delete cascade for a relationship without navigation property in dependent entity

查看:29
本文介绍了EF4.1 代码优先:如何为依赖实体中没有导航属性的关系禁用删除级联的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有这两个非常基本的实体:

Let's say I have these two very basic entities:

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 id,仅此而已.到目前为止,没问题,我只是删除了 [NOTWANTED] 行,一切正常.

For some reasons, I don't want the ChildEntity to hold a reference back to his parent. I just want it to keep the ParentEntity id but nothing more. Up until now, no problem, I just delete the [NOTWANTED] line, and everything works as expected.

我的问题是:如何在特定情况下禁用级联删除?

My problem here is: how to disable the cascade delete in that specific case?

如果我仍然有父导航属性,那就很简单了:

If I still had the parent navigation property it would be as easy as:

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

但是,如果没有导航属性,我不知道如何在删除时禁用级联(当然,不全局禁用它,也不针对每个表禁用它,而只是针对关系).

However without the navigation property I have no idea how I can achieve to disable the cascade on delete (without disabling it globally of course, nor per table, but just for the relation).

我现在所做的是将外键设置为可为空的 int,以便在删除时禁用级联,但这并不漂亮:

What I have done right now is to set the foreign key as a nullable int, in order to disable the cascade on delete, but that's not pretty:

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

我怎样才能让它与流畅的 API 一起工作?觉得应该可以.

How can I get it to work with fluent API? Think it should be possible.

推荐答案

必须从关联的另一端配置:

You must configure it from the other side of the association:

modelBuilder.Entity<ParentEntity>()
    .HasMany(p => p.Children)
    .WithRequired()
    .HasForeignKey(c => c.ParentEntityId)
    .WillCascadeOnDelete(false);

这篇关于EF4.1 代码优先:如何为依赖实体中没有导航属性的关系禁用删除级联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆