【发布时间】:2018-02-15 19:13:01
【问题描述】:
我有以下结构:
public partial class Driver
{
public int ID { get; set; }
//....
#region Vistracks Required Fields
public virtual ProblemSyncToVistracksDriver ProblemSyncToVistracksDriver { get; set; }
#endregion
}
public partial class ProblemSyncToVistracksDriver
{
[Key, ForeignKey("Driver")]
public int DriverId { get; set; }
public virtual Driver Driver { get; set; }
public int? ResponseCode { get; set; }
public string Message { get; set; }
public string Description { get; set; }
public bool IsServerError { get; set; }
public DateTime DateAdded { get; set; }
}
modelBuilder.Entity<ProblemSyncToVistracksDriver>()
.HasRequired(s => s.Driver)
.WithOptional(ad => ad.ProblemSyncToVistracksDriver)
.WillCascadeOnDelete(false);
然后我尝试从 ProblemSyncToVistracksDriver 中删除具体驱动程序的记录:
var driver = await (from i in _db.Drivers where i.AspNetUser.UserName.Equals(model.Email, StringComparison.InvariantCultureIgnoreCase) select i).FirstOrDefaultAsync();
if (driver == null)
throw new NullReferenceException();
driver = mapper.Map<VistrackDriverInfoDomain, Infrastructure.Asset.Driver>(model, driver);
driver.IsVistracksAdded = true;
driver.VistracksDateSync = DateTime.Now;
driver.ProblemSyncToVistracksDriver = null;
_db.Entry(driver).State = EntityState.Modified;
await _db.SaveChangesAsync();
没有错误,所有其他更改都会保存。但是没有删除 ProblemSyncToVistracksDriver 中的记录。为什么以及如何解决?
【问题讨论】:
-
将 WillCascadeOnDelete 设置为 true
-
@LucianBumb,无法将 WillCascadeOnDelete 设置为 true(客户要求)。
-
该设置负责删除孩子的,如果你不能使用它意味着你需要在你的代码中手动执行
-
@LucianBumb 但字符串 driver.ProblemSyncToVistracksDriver = null;不是说手动删除吗?
标签: c# entity-framework entity-framework-6 ef-code-first code-first