4

在一个项目中,我有一个包含以下列的数据库表

在此处输入图像描述

我希望能够从此表中删除所有具有匹配的 SharingAgencyId 和 ReceivingAgencyId 值的行,我可以传入这些值。

到目前为止我已经尝试过:

 public static ICollection<SecurityDataShare> UpdateSharedEntites(long conAgency, long recAgency)
        {
            ICollection<SecurityDataShare> agShares = null;
            try
            {
                using (var context = new ProjSecurityEntities(string.Empty))
                {
                    agShares = (from a in context.SecurityDataShares
                               .Where(c => c.ReceivingAgencyId == recAgency && c.SharingAgencyId == conAgency)
                                select a); 
                }
            }
            catch (Exception ex)
            {
                //ToDo
                throw;
            }
        }

我的想法是检索 id 与传入的参数匹配的记录,然后使用 foreach 循环遍历 (agShare) 并删除每一行,然后保存我的更改。使用当前的实现,我似乎无法访问任何 Delete 方法。

查看上面的示例,我将不胜感激有关如何使用 dbContext 删除表中包含值 43 和 39 的行的任何建议。

干杯

4

3 回答 3

6

如果我理解正确,您DbContext的属性 likeSecurityDataShares应该输入为IDbSet<SecurityDataShare>. 如果那是正确的,你应该可以使用这个Remove方法

foreach(var agShare in agShares) {
    context.SecurityDataShares.Remove(agShare);
}
context.SaveChanges();

请注意,这会创建一个单独的 SQL 语句来删除这些对象。如果您希望对象的数量相当大,您可能希望使用存储过程。

于 2012-04-18T16:56:00.193 回答
2

实体框架并不容易运行单个命令来删除多行(我知道)。我的偏好是使用原生 sql 和 sorts 的 dbcontext直接为多实体更新/删除运行 SQL 语句。

于 2012-04-18T17:05:43.700 回答
0

您还可以将数据表传递给存储过程,数据库包含您类型的动态类型表,并将该表用于存储过程以从数据库表中删除匹配的行。

于 2014-08-04T12:19:18.963 回答