在插入中使用LINQ to Entities

时间:2018-04-10 12:30:46

标签: c# sql-server linq linq-to-sql entity

我正在将我的数据库从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函数) 将数据插入数据库时​​?

1 个答案:

答案 0 :(得分:1)

您应该使用基本的.NET方法DateTime.Now

它将SQL转换为GetDate()

您的代码:

var message = new MessageEntityClass()
{
    Message = message, ServerTime = DateTime.Now
};