【问题标题】:How can i get EF6 to remove an object from the database when it is removed from a collection?从集合中删除对象时,如何让 EF6 从数据库中删除对象?
【发布时间】:2016-06-23 23:36:44
【问题描述】:

我在修改子集合然后运行保存时首先使用 EF6 代码,保存运行但 Db 行没有被删除,只是将外键设置为 null。

基本模型

public class Building 
{
   int Id {get;set;}
   ICollection<BuildingFloors> BuildingFloors
}    

public class BuildingFloors
{
   int id
}

我在 DBContext 中设置级联,例如

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<Model.Building>()
                .HasMany(t => t.BuildingFloors)
                .WithOptional(d => d.Building)
                .WillCascadeOnDelete(true);

   base.OnModelCreating(modelBuilder);
}

然后在保存集合时,我正在清除当前列表。

building.BuildingFloors.Clear();

然后重新添加新值。

foreach(var floor in FloorCollection)
{
   building.BuildingFloors.Add(buildingFloor);
}

当对象从集合中删除时,我如何让 EF 从数据库中删除它?

【问题讨论】:

  • 你不能。但是如果你从 dbcontext 中删除对象,它也会从集合中删除。
  • 顺便说一句。如果您将关系更改为一对多而不是零/一对多,它将开箱即用。
  • 你能解释一下我该怎么做吗?
  • 您可以通过将“.WithOptional(d => d.Building)”替换为“.WithRequired(d => d.Building)”来做到这一点。如果 BuildingFloor 不能在没有 Building 的情况下存在,您应该进行此更改。

标签: c# entity-framework entity-framework-6


【解决方案1】:

tmg。是对的,只是我还需要设置外键关系

所以 buildingfloors 类需要是

public class BuildingFloors
{
   int id

   //forgin key 
   int Building_Id
}

并且映射需要是

modelBuilder.Entity<Model.Building>()
  .HasMany(t => t.BuildingFloors)
  .WithRequired()
  .HasForeignKey(t => t.Building_Id)
  .WillCascadeOnDelete(true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多