PDA

View Full Version : سوال: ثبت ساعت و تاریخ سمت سرور در Codefirst



Iran58
یک شنبه 27 اسفند 1396, 15:17 عصر
سلام
فرض کنید کلاس زیر را داریم

public class Test
{
[Key]
public int Id { get; set; }
[Column(TypeName = "Date")]
public DateTime Date { get; set; }
public TimeSpan Time { get; set; }
}

حال می خواهم ساعت و زمان در بانک اطلاعاتی بصورت اتوماتیک ثبت شود در migration بای چه کدی بنویسم و ایا در خود کلاس اصلا می توانم تعریف کنم
باتشکر

EnKamran
یک شنبه 27 اسفند 1396, 16:49 عصر
در خود كلاس اگر تو قسمت ستر بنویسید هربار كه اضافه میكنید یا "ویرایش" میكنید تایم رو ست میكنه (مثلا برای فیلد 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);
}
تو متد افزودن هم میتونید دستی مقدار دهی كنید.

Moien Tajik
یک شنبه 27 اسفند 1396, 19:06 عصر
راه ساده تر این هست :

public DateTime Date { get; set; } = DateTime.Now;

hakim22
یک شنبه 27 اسفند 1396, 20:17 عصر
می توانید یک 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; }
}



روشهای دیگه هم خوبه اما باید دقت کنید که وقتی دارید ویرایش می کنید زمان ایجاد نباید تغییر کنه. زمان ایجاد یک بار و در زمان ایجاد رکورد ثبت میشه.

Iran58
یک شنبه 27 اسفند 1396, 20:34 عصر
می توانید یک 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; }
}



روشهای دیگه هم خوبه اما باید دقت کنید که وقتی دارید ویرایش می کنید زمان ایجاد نباید تغییر کنه. زمان ایجاد یک بار و در زمان ایجاد رکورد ثبت میشه.
سلام
مهندس میشه کاملتر کدها را قرار دهید
باتشکر