Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF:在不首先获取数据的情况下清除集合属性_C#_Entity Framework - Fatal编程技术网

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是否允许空值?