2017-10-19 125 views
0

我试图删除我的实体与它相关的实体,但实体框架不想这样做。EF核心不删除相关实体

下面是代码:

 var tr = _context.Trees 
      .Include(x => x.Translation) 
      .FirstOrDefault(x => x.Id == 2); 

     _context.Remove(tr); 
     _context.SaveChanges(); 

语境:

modelBuilder.Entity<Tree>().ToTable("h_tree"); 
    modelBuilder.Entity<Tree>().HasOne(x => x.Translation); 

树类:

public class Tree 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual Translation Translation { get; set; } 
} 

任何人有任何想法,为什么相关的实体不能被删除?

翻译类:

public class Translation 
{ 
    public long Id { get; set; } 
    public string Pl { get; set; } 
    public string En { get; set; } 
    public string De { get; set; } 
    public string Cz { get; set; } 
    public string It { get; set; } 
    public string Ru { get; set; } 
    public string Fr { get; set; } 

    public Translation() 
    { 

    } 
} 
+0

在数据集中是否真的有id = 2的记录? –

+0

当然可以。这是EF日志: SET NOCOUNT ON; DELETE FROM [cat]。[h_tree] WHERE [id] = @ p0; SELECT @@ ROWCOUNT; – bielu000

回答

1

你似乎已经错过了说这是否是一个对一个或一个一对多的关系。

.HasOne()需要与.With*()方法配对。 .WithOne().WithMany()


看来你的翻译类缺少一个外键。

添加名为TreeId的房产并在.WithOne()调用中使用该房产。

+0

我试过这个语法:modelBuilder.Entity ().HasOne(x => x.Translation).WithOne()。OnDelete(DeleteBehavior.Cascade); 但它不起作用。 – bielu000

+0

我有以下错误:无法确定在'Tree.Translation'和'Translation'之间检测到的一对一关系的子/从属方。要确定关系的子/从属端,请配置外键属性。 – bielu000

+0

@ bielu000那么在'Translation'中你的外键字段是什么?你为什么不把它放在你的.WithOne方法中? – nvoigt