كيف تسأل خادم قاعدة البيانات عن DateTime الحالي باستخدام إطار الكيان؟

StackOverflow https://stackoverflow.com/questions/2585272

سؤال

لديّ كيان يحتوي على خاصية ModifiedDateTime التي أريد تحديثها باستخدام DateTime الحالي من قاعدة البيانات بدلاً من خادم "التطبيق" الذي ينفذ التطبيق.

في كل مرة أرغب في تحديث أو إضافة شخص إلى قاعدة DateBase على SQL Server 2008 ، أريد ملء FiveDateTime. ليس الأمر كما لو أنه يمكنني تغيير استعلام التحديث كما هو الحال مع أمر محول البيانات عندما أعمل مع مجموعة البيانات والتعريف الخاص بي المعدلة في الوقت المحدد ليكون getDate (). لقد قمت بإنشاء وظيفة مخزنة لإرجاع طريقة getDate () ، لكن لدي مشكلة في استيراد إجراءات إرجاع القيم كـ int أو سلسلة أو لا قيمة على الإطلاق ، فقط قيم الكيان كشخص على سبيل المثال في حالتي. لماذا هذا؟

على أي حال ، سيكون من المفيد مساعدة إذا تمكنت من مساعدتي في استرداد DateTime الحالي من خادم قاعدة البيانات.

هل كانت مفيدة؟

المحلول

هل هناك سبب لا يمكنك دفعه إلى قاعدة البيانات الخاصة بك؟ إذا قمت بتضمين DateTime.own في استعلام الكيان الخاص بك ، فسيدفعه لأسفل (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]

قد تكون طريقة أفضل للقيام بذلك؟

نصائح أخرى

هذا تحديث للاستجابة لـ @nix إلى EF4:

var dateQuery = dbContext.Database.SqlQuery<DateTime>("SELECT getdate()");
DateTime serverDate = dateQuery.AsEnumerable().First();

تحديث لـ .NET Core 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;
    }

معلومات اكثر:الواردات الوظيفية في نموذج الكيان مع نوع إرجاع غير عائد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top