0

我有这个实体:

public class Account
{
    [Key]
    [ForeignKey("Company")]
    [Required]
    public Guid CompanyId { get; set; }

    public virtual Company Company { get; set; }
}

和这个:

public class Company : PrimaryKey
{
    public string Name { get; set; }

    public virtual ICollection<Contact> Contacts { get; set; }
    public virtual Account Account { get; set; }
}

如何使用fluent api启用级联删除,我试过这个:

modelBuilder.Entity<Company>().HasOptional<Account>().WithRequired().WillCascadeOnDelete();

但我不知道这意味着什么。基本上,我想要一个Company可选的Account,当公司被删除时将被删除。

4

2 回答 2

2

您需要的映射是:

modelBuilder.Entity<Company>()
    .HasOptional(c => c.Account)
    .WithRequired(a => a.Company)
    .WillCascadeOnDelete();

Company和之间是一对一的关系Account。使用此映射,您无论如何都可以删除[ForeignKey("Company")]属性和属性,因为 a不可为空,因此始终是必需的。[Required]Guid

于 2013-09-06T19:19:41.887 回答
0

请点击链接启用级联删除

您可以使用 WillCascadeOnDelete 方法对关系配置级联删除。如果依赖实体上的外键不可为空,则 Code First 会在关系上设置级联删除。如果依赖实体上的外键可以为空,Code First 不会在关系上设置级联删除,并且当主体被删除时,外键将设置为空。

您可以使用以下方法删除这些级联删除约定:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>()

以下代码将关系配置为必需,然后禁用级联删除。

modelBuilder.Entity<Course>()
    .HasRequired(t => t.Department)
    .WithMany(t => t.Courses)
    .HasForeignKey(d => d.DepartmentID)
    .WillCascadeOnDelete(false);

在你的例子中类似的东西:

modelBuilder
  .Entity<Company>()
  .HasOptional<Account>()
  .HasForeignKey(a => a.CompanyId)
  .WillCascadeOnDelete();
于 2013-09-06T17:22:51.783 回答