エンティティフレームワークを使用して現在の日時のデータベース・サーバに依頼する方法は?
-
24-09-2019 - |
質問
私は、私が代わりにアプリケーションを実行する「アプリケーション」サーバーのデータベースから現在の日時で更新したいModifiedDateTimeプロパティを持つエンティティを持っています。
私はSQL Server 2008で私のdatebaseに人を更新または追加するたびに、私はModifiedDateTimeが提出いっぱいにしたいです。私は、データセットで動作し、私のModifiedDateTimeはのGetDate(ように提出用)を定義するとき、私はデータアダプタコマンドのように更新クエリを変更することができるようにそうではありません。私は私のGetDate()メソッドの値を返すストアドファンクションを作成したが、私は私の場合には例えばint型、文字列、またはまったく値としての値を返すインポート手順に問題、人としてすでにちょうどエンティティ値を持っています。何故ですか?
は、データベース・サーバから現在のDateTimeを取得するために私を助けることができる場合はとにかく、それは大きな助けになるでしょう。
解決
あなたは自分のデータベースにそれをプッシュすることはできません理由はありますか?あなたは、エンティティのクエリでDateTime.Nowが含まれている場合、それはデータベースに(GETDATE)それをプッシュします。
エンティティへのLINQ例
var dQuery = dbContext.CreateQuery<DateTime>("CurrentDateTime() ");
DateTime dbDate = dQuery.AsEnumerable().First();
.. 生成SQL
SELECT GetDate() AS [C1] FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1]
はそれを行うには良い方法かもしれませんか?
他のヒント
これはEF4に@Nix応答の更新である:
var dateQuery = dbContext.Database.SqlQuery<DateTime>("SELECT getdate()");
DateTime serverDate = dateQuery.AsEnumerable().First();
.NETコアのアップデート2.0
var dual = databaseContext
.Set<Dual>()
.FromSql("SELECT -1 AS Id, GETDATE() AS DateTime")
.First();
偽実体
public class Dual
{
public int Id { get; set; }
public DateTime DateTime { get; set; }
}
でVS 2008は、それが使いやすい、それを作るためにコードを追加しません。あなたは直接関数テンプレートにアクセスする必要がある - 私は使いやすさのために必要なメソッドを構築するために部分クラスを使用します。彼らはVS2010でこれを修正しました。
public DateTime GetDateTime()
{
var returnValue = new DateTime();
using (var connection = new EntityConnection(Connection.ConnectionString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "myStoredProc";
command.CommandType = CommandType.StoredProcedure;
try
{
returnValue = Convert.ToDateTime(command.ExecuteScalar());
}
finally
{
connection.Close();
}
}
}
return returnValue;
}
詳細情報: 機能輸入戻り値の型の