c# - 如何使 EF 使用字符串连接构建更新 SQL?

标签 c# sql-server entity-framework linq tsql

在我的 ASP.NET MVC 4/EF 5 web 应用程序的数据库中,我有一个带有 Comments 列的表,我想将新评论连接到该列。在传统的 T-SQL 中,我会写:

UPDATE MyTable SET Comments = 'Hi' + CHAR(13)+CHAR(10) + Comments WHERE ID = 2

我发现 EF 的方法 linq(uow + 存储库模式——我很遗憾),我必须首先查询 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();

有没有什么方法可以在不需要查询数据库的情况下编写这个更新?我想以某种方式让 EF 生成上面的 t-sql。评论可能很长,我不在乎它包含什么。性能是一个问题。

提前致谢。

最佳答案

标准更新设置了字段,我假设您需要保留该功能,否则您将无法编辑以前的评论。所以这意味着你有一个特殊的更新案例。我会为 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);
}

关于c# - 如何使 EF 使用字符串连接构建更新 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773936/

相关文章:

C# 是否可以中断 ThreadPool 中的特定线程?

c# - 通过 SetupApi 找出为设备加载的驱动程序

c# - 如何在 Android 中使用 C# 生成的 RSA 公钥?

sql-server - SSRS 报告,SQL 链接服务器,用户登录失败 'NT AUTHORITY\ANONYMOUS LOGON'

c# - Entity Framework LINQ 包含不区分大小写

c# - richtextbox 到字符串

asp.net - 在内容管理系统中处理图像和文件附件

sql-server - 在SQL Server 2005+中,计算日期是否在一个范围内同时排除某些工作日

entity-framework - Entity Framework : Inheritance and Include

.net - .net Entity Framework 与 LinqToSql 相比如何?