如何从实体框架TPH子类型的集合属性中删除项目?

时间:2015-09-01 09:18:42

标签: c# entity-framework-6

我有一个EquityWatchList : WatchList课程,如下所示:

public class EquityWatchList : WatchList
{
    public virtual ICollection<Stock> Stocks { get; set; }

    public EquityWatchList()
    {
        this.Stocks = new List<Stock>();
    }
}

使用TPH将数据映射到数据库,并使用基类属性的discriminator字段。它通过以下映射成功Adds库存到WatchListEquities表:

public class EquityWatchListMap : EntityTypeConfiguration<EquityWatchList>
{
    public EquityWatchListMap()
        : base()
    {
        // Primary Key
        this.HasKey(t => t.ID);

        // Properties
        this.Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(100);

        this.Property(t => t.UserID)
            .HasMaxLength(128);

        this.Ignore(t => t.State);
        this.Ignore(t => t.UsePropertyNotifications);

        // Table & Column Mappings
        this.ToTable("WatchList");
        this.Property(t => t.ID).HasColumnName("ID");
        this.Property(t => t.Name).HasColumnName("Name");
        this.Property(t => t.UserID).HasColumnName("UserID");
        this.Property(t => t.Type).HasColumnName("Type");

        // Relationships
        this.HasMany(t => t.Stocks)
            .WithMany(t => t.EquityWatchLists)
            .Map(m =>
             {
                 m.ToTable("WatchListEquities");
                 m.MapLeftKey("WatchListId");
                 m.MapRightKey("StockId");
             });
    }
}

这一切都是使用断开连接的上下文发生的。我的问题是当我尝试删除WatchList中的任何股票时,保存它们永远不会被删除。

我已经阅读了这篇文章here,其中说你基本上必须重新查询数据库的内容,然后将其与内存中的内容进行比较,删除内容然后重新保存。这听起来很错误,但即使听起来不错,我似乎也无法做到,因为没有DbSet<EquityWatchList>可以删除股票,只有基数DbSet<WatchList>

这基本上不可能吗?

0 个答案:

没有答案