以IQueryable模式更新实体集合

时间:2015-04-09 11:56:04

标签: c# entity-framework iqueryable

我应该使用EF在C#代码中重写SQL代码:

UPDATE Submissions SET Other_Platform = (SELECT top 1 Other_Platform FROM Submission_Platform_Other_DistributionMethods WHERE Submission_ID = @SubmissionId )   

因为表Submissions中有许多记录我不想将此集合转换为List以更新循环字段。

有人有什么想法吗?感谢。


var otherPlatform = db.Submission_Platform_Other_DistributionMethods.FirstOrDefault(d => d.Submission_ID == subId);
var toUpdate = db.Submissions.Select(s=> UpdateSubmission(otherPlatform));

db.Submissions.AddRange(toUpdate);
db.SaveChanges();

这是我想到的一种可能的解决方案 - 创建一些方法(如mapper),将参数设置为Other_Platform

1 个答案:

答案 0 :(得分:1)

如果您希望保持已完成更新的上下文警报。然后我认为除了循环收集并更新平台然后保存更改之外,还有其他方法。

您可以采取其他两种方式,但这些方法意味着更改将超出您在上下文中加载的实体,并且您必须重新创建上下文。

1)创建一个存储过程并使用您提供的参数执行该过程

2)执行sqlcommand到上下文

using (var context = new MyContext()) 
{ 
    context.Database.SqlCommand("<update query here>"); 
}