EF代码优先,不能删除外键关系

Beh*_*ooz 5 c# entity-framework ef-code-first

我在这里显示了两个模型:

public class Application
{
  public string Name { get; set; }
  public virtual ICollection<ApplicationTransaction> ApplicationTransactions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class ApplicationTransaction
{
  public long ApplicationId { get; set; }
  public virtual Application Application { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我试图删除所有ApplicationTransactionApplication与此代码:

var app = _repository.Get<Application>(i => i.Id == 1);
app.ApplicationTransactions.Clear();
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

但是当上下文保存更改时,会发生错误:

操作失败:由于一个或多个外键属性不可为空,因此无法更改该关系。对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

在此处输入图片说明

dar*_*yal 0

仅仅清除相关实体的集合是不够的,因为每个相关实体都存储一个指向该Application实体的外键;因此,您需要删除相关实体,而不是清除相关实体的集合。

foreach (ApplicationTransaction applicationTransaction in app.ApplicationTransactions.ToList())
    context.DeleteObject(applicationTransaction);
Run Code Online (Sandbox Code Playgroud)