如何使EF使用字符串concat构建更新SQL?

LoJ*_*oJo 5 c# t-sql linq sql-server entity-framework

在我的ASP.NET MVC 4/EF 5 Web应用程序的数据库中,我有一个带有Comments列的表,我希望将新注释连接到.在传统的T-SQL中,我写道:

UPDATE MyTable SET Comments = 'Hi' + CHAR(13)+CHAR(10) + Comments WHERE ID = 2
Run Code Online (Sandbox Code Playgroud)

我发现使用方法linq for EF(uow + repository pattern - 我很遗憾),我必须首先查询Comments的当前值并在其前面添加我的新注释:

StringBuilder displayComment = new StringBuilder();
var item = uow.MyRepos.Where(i => i.ID == 2);
item.Comments = displayComment.Append("Hi")
                              .Append(Environment.NewLine)
                              .Append(item.Comments)
                              .ToString();
uow.Save();
Run Code Online (Sandbox Code Playgroud)

有没有办法编写此更新而无需查询数据库?我想以某种方式让EF生成上面的t-sql.评论可能很长,我不关心它包含什么.性能是一个问题.

提前致谢.

Col*_*lin 0

标准更新设置了该字段,我假设您需要保留该功能,否则您将无法编辑以前的评论。这意味着您有一个特殊的更新案例。我会向存储库添加一个方法来MyTable运行您想要的 sql:

public int PrependComment(int id, String comment)
{
   String sql = "UPDATE MyTable SET Comments = {0} + 
      CHAR(13)+CHAR(10) + Comments WHERE ID = {1}";
   return dbContext.Database.ExecuteSqlCommand(sql, comment, id);
}
Run Code Online (Sandbox Code Playgroud)