无法使用实体框架删除子元素

问题描述 投票:0回答:1

有人可以帮我解决我的问题吗?我在互联网上搜索了很多。但还是无法解决。

我正在将 Entity Framework 6 代码优先与 Microsoft SQL Server 结合使用。

我的实体是这样的:

public class StockInfo
{
    [JsonIgnore]
    [Key]
    public int StockInfoID { get; set; }
    [ForeignKey("StockInfoID")]
    public virtual CompanyInfo companyInfo { get; set; }
    [ForeignKey("StockInfo_ID")]
    public virtual List<CorpAction> corpActions { get; set; }
    ...... so on
}

public class CompanyInfo
{
    [JsonIgnore]
    // [Key, ForeignKey("StockInfo")]
    public int CompanyInfoID { get; set; }
    public int avgVolume { get; set; }
    public string coName { get; set; }
    ...........
}

public class CorpAction
{
    public int ID { get; set; }
    public int corpActionType { get; set; }
    public string date { get; set; }
    ........

    public int StockInfo_ID { get; set; }
}

然后我尝试在我的存储库中保存/更新

StockInfo

public void SaveStockInfo(StockInfo StockWeeklyInfo)
{
    var content = context.StockInformation.Where(x => x.companyInfo.symbol == StockWeeklyInfo.companyInfo.symbol).FirstOrDefault();

    if (content == null)
    {
        context.StockInformation.Add(StockWeeklyInfo);
    }
    else
    {
        context.StockInformation.Remove(content);
        context.Entry(content).State = EntityState.Deleted;
        context.StockInformation.Add(StockWeeklyInfo);
    }

    context.SaveChanges();
}

我的问题是,当我删除

StockInfo
并添加一个新的时。在 SQL Server 中,我可以看到一个新的
StockInfo
实体而不是旧实体。

但是在

CompanyInfo
表中,实体框架只是添加另一个表,并没有删除前一个表。

我做错了什么?有趣的是,

CorpAction
效果很好。

c# entity-framework
1个回答
0
投票

首先 - 你的代码优先模型看起来很奇怪。你有:

  [ForeignKey("StockInfoID")]
  public virtual CompanyInfo companyInfo { get; set; }

[ForeignKey("StockInfo_ID")]
public virtual List<CorpAction> corpActions { get; set; }

这些导航是否正确声明?我怀疑您的 CompanyInfo 实体与 StockInfo 具有相同的 Id。

您还希望删除 StockInfo 时也删除 CompanyInfo。外键是否声明为“ON DELETE CASCADE”?

© www.soinside.com 2019 - 2024. All rights reserved.