有人可以帮我解决我的问题吗?我在互联网上搜索了很多。但还是无法解决。
我正在将 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
效果很好。
首先 - 你的代码优先模型看起来很奇怪。你有:
[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”?