我正在将我的数据库从SQL查询重构为Linq。
此功能正常工作:
public void WriteMessageWithSqlServerTimeOld(string message, string connectionString)
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
using (var command = conn.CreateCommand())
{
SqlCommandBuilder builder = new SqlCommandBuilder();
command.CommandText = $"INSERT INTO messages VALUES (GETDATE(), @message);";
command.Parameters.AddWithValue("@message", message);
command.ExecuteNonQuery();
}
}
}
但我想知道如何用linq写这个。 我天真的尝试看起来像这样:
public void WriteMessageWithSqlServerTimeNew(string message, string connectionString)
{
var db = new DataContext(connectionString);
var messages = db.GetTable<MessageEntityClass>();
var message = new MessageEntityClass()
{
Message = message, ServerTime = System.Data.Objects.SqlClient.SqlFunctions.GetDate()
};
messages.InsertOnSubmit(message);
db.SubmitChanges();
}
但这给了我一个
System.NotSupportedException:'只能从中调用此函数 'LINQ to Entities'。'
基本上我的问题是,如何调用System.Data.Objects.SqlClient.SqlFunctions.GetDate()
(或任何其他sql函数)
将数据插入数据库时?
答案 0 :(得分:1)
您应该使用基本的.NET方法DateTime.Now
。
它将SQL转换为GetDate()
。
您的代码:
var message = new MessageEntityClass()
{
Message = message, ServerTime = DateTime.Now
};