在更新时删除同一实体的实体列表

时间:2018-10-30 17:55:07

标签: c# entity-framework collections ef-model-builder

大家好,我找不到这个问题的解决方案,我有一个实体,该实体的属性在DbModelBuilder上创建了

首先是具有属性RelatedFoo的类,该属性是同一Foo实体的列表

public class Foo
    {
        public int FooId { get; set; }
        public string Name { get; set; }

        public virtual List<Foo> RelatedFoo { get; set; }
    }

这是在DbContext

中创建的
modelBuilder.Entity<Foo>()
        .HasMany(p => p.RelatedFoo)
        .WithMany()
        .Map(m =>
        {
            m.MapLeftKey("FooId");
            m.MapRightKey("RelatedFooId");
            m.ToTable("RelatedFoos");                
        });

导致迁移的结果是这样的

CreateTable(
            "dbo.RelatedFoos",
            c => new
                {
                    FooId= c.Int(nullable: false),
                    RelatedFooId= c.Int(nullable: false),
                })
            .PrimaryKey(t => new { t.FooId, t.RelatedFooId })
            .ForeignKey("dbo.Foo", t => t.FooId)
            .ForeignKey("dbo.Foo", t => t.RelatedFooId )
            .Index(t => t.FooId)
            .Index(t => t.RelatedFooId );

一切正常,我可以做类似的事情:

//Create new list of relatedFoos        
List<Foo> relatedFoos = new List<Foo>();
//Add Foo entities to this list
relatedFoos.Add(fooEntity1);
relatedFoos.Add(fooEntity2);
//Add this List to a main Foo entity
Foo mainFooEntity.RelatedFoo = relatedFoos;
//Save this
db.Entry(mainFooEntity).State = EntityState.Modified;
db.SaveChanges();

并将relatedFoos保存在新表(RelatedFoos)中

当我尝试删除此relatedFoos ...时,问题就来了。

//Starting from a main Foo Entity
mainFooEntity.RelatedFoo = null;
db.Entry(mainFooEntity).State = EntityState.Modified;
db.SaveChanges();

这不会删除“ RelatedFoos”的数据,也不会将mainFooEntity.RelatedFoo分配给空的List<Foo>,也不会删除当前数据。如何删除此List<>

1 个答案:

答案 0 :(得分:0)

我找不到解决方案,因此我自己创建了一个新的Entitie“ RelatedFoos”,但是淘汰了modelBuilder,这个新的实体只是用于针对“ Foo” N关系创建“ Foo”的关系表。

我创建模型并添加到DbContext,创建迁移,因此,通过这种方式,我可以使用此模型类进行更新或删除而不会出现问题。

先谢谢了。