C# 如何将子实体更改为父实体?
我在将子实体更改为父实体时遇到问题。 在我的Item类中,我有一个“父项”的Nagiviation属性。 现在我想更新我的孩子并从父母那里“取消绑定” 我发现: 但也许有一种“巧妙的方式”来做我想做的事C# 如何将子实体更改为父实体?,c#,sql-server,asp.net-core,.net-core,entity-framework-core,C#,Sql Server,Asp.net Core,.net Core,Entity Framework Core,我在将子实体更改为父实体时遇到问题。 在我的Item类中,我有一个“父项”的Nagiviation属性。 现在我想更新我的孩子并从父母那里“取消绑定” 我发现: 但也许有一种“巧妙的方式”来做我想做的事 public class Item { public string Id { get; private set; } public Item Parent { get; set; } public List<Item> Children { get; pr
public class Item
{
public string Id { get; private set; }
public Item Parent { get; set; }
public List<Item> Children { get; private set; }
}
public class DataContext : IdentityDbContext<User>
{
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
}
public DbSet<Item> Items { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Item>().HasMany(x => x.Children).WithOne(x => x.Parent).OnDelete(DeleteBehavior.Cascade);
base.OnModelCreating(builder);
}
}
public async Task UpdateAsync(Item item)
{
item.Parent = null;
_context.Items.Update(item);
await _context.SaveChangesAsync();
}
公共类项目
{
公共字符串Id{get;private set;}
公共项父项{get;set;}
公共列表子项{get;private set;}
}
公共类DataContext:IdentityDbContext
{
公共数据上下文(DbContextOptions):基本(选项)
{
}
公共数据库集项{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder)
{
builder.Entity().HasMany(x=>x.Children).WithOne(x=>x.Parent).OnDelete(DeleteBehavior.Cascade);
基于模型创建(生成器);
}
}
公共异步任务UpdateAsync(项)
{
item.Parent=null;
_context.Items.Update(item);
wait_context.SaveChangesAsync();
}
我希望更改(更新)来自:
- 项目1
- 项目2
- 项目1
- 项目2
此外,当我删除父项时,我想删除所有子项-它现在起作用,我想保留此行为。项类必须具有ParentId才能在它和父项之间创建关系。 若您添加它,然后将其设置为null,您的问题可能会得到解决
public class Item
{
public string Id { get; private set; }
public string ParentId {get; set;}
public Item Parent { get; set; }
public List<Item> Children { get; private set; }
}
公共类项目
{
公共字符串Id{get;private set;}
公共字符串ParentId{get;set;}
公共项父项{get;set;}
公共列表子项{get;private set;}
}
如果不希望删除实体,也可以在保存之前尝试设置实体的状态
var entry = _context.Entry(Item1);
entry.State = EntityState.Modified;
它不漂亮,但它应该能起作用
EF仍然删除对象。添加ParentId属性有效。