C# EF:在不首先获取数据的情况下清除集合属性
我有一个叫做C# EF:在不首先获取数据的情况下清除集合属性,c#,entity-framework,C#,Entity Framework,我有一个叫做Facility的课程设施上有一个名为员工的集合属性。我正在使用EF的断开连接层。我想清除特定设施中的员工集合,但我不想两次前往DB:(1)获取所有员工,然后(2)清除数据库。我该怎么做 这是我试过的 Facility f = new Facility() { Id = 4, Employees = new List<Employee>() }; context.Facilities.Attach(f); context.Entry<Facility
Facility
的课程<代码>设施上有一个名为员工
的集合属性。我正在使用EF的断开连接层。我想清除特定设施中的员工
集合,但我不想两次前往DB:(1)获取所有员工,然后(2)清除数据库。我该怎么做
这是我试过的
Facility f = new Facility()
{
Id = 4,
Employees = new List<Employee>()
};
context.Facilities.Attach(f);
context.Entry<Facility>(f).Collection(fac => fac.Employees).IsLoaded = true;
context.SaveChanges();
设施f=新设施()
{
Id=4,
雇员=新名单()
};
上下文。设施。附(f);
context.Entry(f).Collection(fac=>fac.Employees).IsLoaded=true;
SaveChanges();
我想我很接近了,但它不起作用。谢谢你的建议。如果你只想使用EF,你总是需要一些往返。最后,EF需要生成
DELETE。。。其中Id=x
语句。它如何知道x
的值而不首先从数据库中获取它们
当然,您可以用比获取完整的Employee
对象更有效的方法来实现这一点。获取Id
值就足够了。然后,您可以使用这些Id
s来创建标记为已删除的存根实体:
var ids = context.Empoyees.Where(e => e.FacilityId == 4)
.Select(e => e.Id).ToArray();
foreach(int id in ids)
{
var emp = new Empoyee { Id = id }; // Stub entity
context.Entry(emp).State = System.Data.Entity.EntityState.Deleted;
}
context.SaveChanges();
这是纯EF。但是你也可以使用。这允许您执行如下语句
context.Empoyees.Where(e => e.FacilityId == 4)
.Delete();
如果你只想使用EF,你总是需要一些往返。最后,EF需要生成DELETE。。。其中Id=x
语句。它如何知道x
的值而不首先从数据库中获取它们
当然,您可以用比获取完整的Employee
对象更有效的方法来实现这一点。获取Id
值就足够了。然后,您可以使用这些Id
s来创建标记为已删除的存根实体:
var ids = context.Empoyees.Where(e => e.FacilityId == 4)
.Select(e => e.Id).ToArray();
foreach(int id in ids)
{
var emp = new Empoyee { Id = id }; // Stub entity
context.Entry(emp).State = System.Data.Entity.EntityState.Deleted;
}
context.SaveChanges();
这是纯EF。但是你也可以使用。这允许您执行如下语句
context.Empoyees.Where(e => e.FacilityId == 4)
.Delete();
员工
实体对设施
具有FK属性,对吗?。你想对相关员工做什么,删除他们?。你可以发布你的实体吗?我不想删除员工。我只是想理清关系;因此,我想保留我目前的员工以及我的工厂,但我想让员工离开工厂。本质上,它看起来像一个新的设施。员工
和设施之间的关系是可选的?换句话说,Employees
中的FacilityId
FK允许空值?Employees
实体对Facility
具有FK属性,对吗?。你想对相关员工做什么,删除他们?。你可以发布你的实体吗?我不想删除员工。我只是想理清关系;因此,我想保留我目前的员工以及我的工厂,但我想让员工离开工厂。本质上,它看起来像一个新的设施。员工
和设施之间的关系是可选的?换句话说,Employees
中的FacilityId
FK是否允许空值?