与WillCascadeOnDelete的单向关联

时间:2012-07-13 17:50:07

标签: entity-framework ef-code-first cascade

我有一个非常简单的单向类映射。

public class MyDbContext : DbContext
{
    public MyDbContext() : base("CodeFirstDatabase")
    {

    }

    public DbSet<Contact> Contacts { get; set; }
    public DbSet<PhoneNumber> Number { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
        modelBuilder.Entity<Contact>()
            .HasMany(c => c.Numbers)
            .WithOptional()
            //.Map(p => p.MapKey("ContactId"))
            .WillCascadeOnDelete(true);
    }
}

正如您所看到的,Contact有一个Numbers列表,但Number对联系人一无所知(它的父亲没有属性)。 我在这里要做的是实现以下目标: 当从联系中删除号码并使用SaveChanges保存时,我希望从数据库中删除该号码行,而是将外键设置为空,并且该行保留在数据库中。知道什么是错的吗?

感谢。

1 个答案:

答案 0 :(得分:2)

这很烦人,但EF没有提供任何方法来自动删除孤儿。

您必须手动删除PhoneNumber个实例(即context.Number.Remove(theNumber)