ثبت ساعت و تاریخ سمت سرور در Codefirst
سلام
فرض کنید کلاس زیر را داریم
public class Test
{
[Key]
public int Id { get; set; }
[Column(TypeName = "Date")]
public DateTime Date { get; set; }
public TimeSpan Time { get; set; }
}
حال می خواهم ساعت و زمان در بانک اطلاعاتی بصورت اتوماتیک ثبت شود در migration بای چه کدی بنویسم و ایا در خود کلاس اصلا می توانم تعریف کنم
باتشکر
نقل قول: ثبت ساعت و تاریخ سمت سرور در Codefirst
در خود كلاس اگر تو قسمت ستر بنویسید هربار كه اضافه میكنید یا "ویرایش" میكنید تایم رو ست میكنه (مثلا برای فیلد LastUpdate بدرد میخوره)
private DateTime _date = DateTime.Now;
public DateTime Date
{
get { return _date; }
set { _date = value; }
}
تو مایگریشن بذارید همونی میشه كه دنبالش هستید فقط موقع افزودن ركورد جدید اگر خالی بذارید ست میشه :
public static void Configure(DbModelBuilder builder){
builder.Entity<Company>().Property(c => c.Status).HasColumnAnnotation("Default", 0);
}
تو متد افزودن هم میتونید دستی مقدار دهی كنید.
نقل قول: ثبت ساعت و تاریخ سمت سرور در Codefirst
راه ساده تر این هست :
public DateTime Date { get; set; } = DateTime.Now;
نقل قول: ثبت ساعت و تاریخ سمت سرور در Codefirst
می توانید یک Interface تعریف کنید که فقط فیلد تاریخ و ساعت رو داشته باشه. بعد متد SaveChanges در DbContext رو Override کنید و چک کنید که اگر شی دارای این Interface باشه مقدار تاریخ و ساعت رو درج کنه. بعد فقط کافیه Interface رو به هر جدولی که نیاز به تاریخ و ساعت داره اضافه کنید. اینجوری یک مدریت مرکزی روی ثبت تاریخ و ساعت دارید.
foreach (
var entry in
ChangeTracker.Entries()
.Where(e => e.Entity is ITimeCreatedInfo && e.State == EntityState.Added)
.Select(e => e.Entity as ITimeCreatedInfo))
{
entry.TimeCreated = DateTime.Now;
}
اینترفیس :
public interface ITimeCreatedInfo
{
DateTime TimeCreated { get; set; }
}
روشهای دیگه هم خوبه اما باید دقت کنید که وقتی دارید ویرایش می کنید زمان ایجاد نباید تغییر کنه. زمان ایجاد یک بار و در زمان ایجاد رکورد ثبت میشه.
نقل قول: ثبت ساعت و تاریخ سمت سرور در Codefirst
نقل قول:
نوشته شده توسط
hakim22
می توانید یک Interface تعریف کنید که فقط فیلد تاریخ و ساعت رو داشته باشه. بعد متد SaveChanges در DbContext رو Override کنید و چک کنید که اگر شی دارای این Interface باشه مقدار تاریخ و ساعت رو درج کنه. بعد فقط کافیه Interface رو به هر جدولی که نیاز به تاریخ و ساعت داره اضافه کنید. اینجوری یک مدریت مرکزی روی ثبت تاریخ و ساعت دارید.
foreach (
var entry in
ChangeTracker.Entries()
.Where(e => e.Entity is ITimeCreatedInfo && e.State == EntityState.Added)
.Select(e => e.Entity as ITimeCreatedInfo))
{
entry.TimeCreated = DateTime.Now;
}
اینترفیس :
public interface ITimeCreatedInfo
{
DateTime TimeCreated { get; set; }
}
روشهای دیگه هم خوبه اما باید دقت کنید که وقتی دارید ویرایش می کنید زمان ایجاد نباید تغییر کنه. زمان ایجاد یک بار و در زمان ایجاد رکورد ثبت میشه.
سلام
مهندس میشه کاملتر کدها را قرار دهید
باتشکر