12

アプリケーションを実行する「アプリケーション」サーバーではなく、データベースからの現在の日時で更新したい、ModifiedDateTimeプロパティを持つエンティティがあります。

SQL Server 2008の日付ベースに人を更新または追加するたびに、ModifiedDateTimeファイルを入力します。データセットを操作し、ModifiedDateTimeファイルをGetDate()として定義するときに、データアダプターコマンドのように更新クエリを変更できるわけではありません。GetDate()メソッドの値を返すストアド関数を作成しましたが、値をint、string、またはまったく値なしで返すプロシージャをインポートする際に問題があります。たとえば、私の場合は、エンティティ値だけがPersonとして返されます。何故ですか?

とにかく、データベースサーバーから現在のDateTimeを取得するのを手伝っていただければ非常に助かります。

4

5 に答える 5

13

データベースにプッシュできない理由はありますか?エンティティクエリに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]

それを行うためのより良い方法かもしれませんか?

于 2010-04-06T14:11:16.573 に答える
12

これは、EF4に対する@Nixの応答の更新です。

var dateQuery = dbContext.Database.SqlQuery<DateTime>("SELECT getdate()");
DateTime serverDate = dateQuery.AsEnumerable().First();
于 2015-06-24T12:31:52.370 に答える
3

.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; }
}
于 2019-02-21T10:05:10.213 に答える
0

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;
    }

詳細: 非エンティティリターンタイプのエンティティモデルでの関数のインポート

于 2010-04-06T14:37:32.173 に答える
0

EF 3

var dual = await db
            .Set<Dual>()
            .FromSqlRaw(@"
                SELECT 
                    CURRENT_TRANSACTION_ID() as Id, 
                    SYSDATETIMEOFFSET() AS DateTime
            ")
            .FirstAsync();
DateTimeOffset serverTime = dual.DateTime;

public class Dual
{
    public long Id { get; set; }
    public DateTimeOffset DateTime { get; set; }
}

modelBuilder.Entity<Dual>(entity =>
{
    entity.HasNoKey();
    entity.ToView(nameof(Dual));
});
于 2020-08-05T14:10:49.113 に答える