2011-06-24 13 views
5

Entity Framework (ve asp.net mvc 3) konusunda oldukça yeniyim ve bu benim ilk EF4.1 kodundaki ilk deneyimim.Entity Framework 4.1 Otomatik tarih

Sorum basit: Ben modeli aracılığıyla oluşturduğunuzda veritabanı için yeni bir tablo Ben yeni bir satır oluşturulduğunda

  1. otomatik bir alana akım datetime eklemek yapmak istiyorum.
  2. Alan her güncelleştirildiğinde alanı otomatik güncelle. gibi

Aslında değişken görünür: Ben datacontext ait "OnModelCreating" olayı bir şeyler yazmak sanırım

[DisplayName("Data Modifica")] 
[DataType(DataType.DateTime)] 
[DisplayFormat(DataFormatString = "{0:d}")] 
public DateTime DataModifica { get; set; } 

ama zaten bu :) usta çok yeniyim

Can Birisi yardım eder? peşin

sayesinde modelin yaratılması ile ilgisi yoktur V.

cevap

10

. "Model", sınıflar ve veritabanı arasındaki eşlemenizin açıklamasıdır. OnModelCreating, verileri değiştirmemek için haritalama tanımını değiştirmek için kullanılır. Varlık örneğinde kendisiyle ilgili hiçbir şey yoktur.

Eğer SaveChanges geçersiz kılabilirsiniz otomatik değişiklik istiyorsanız:

public override int SaveChanges() 
{ 
    DateTime now = DateTime.Now; 
    foreach (var entity in ChangeTracker.Entries<YourEntityType>() 
             .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified) 
             .Select(e => e.Entity)) 
    { 
      entity.DateModifica = now; // set the date 
    } 

    return base.SaveChanges(); 
} 
+0

Teşekkür ederiz. Neye ihtiyacım var? – Valerio

0

Neden varsayılan değerine başlatılan bir destek alanına sahip biri olarak özellik tanımlamak değil?

private DateTime _dateOfRequest = DateTime.Today; 
    [Display(Name = "Date of Request"), DataType(DataType.Date)] 
    public System.DateTime DateOfRequest { 
     get { return _dateOfRequest; } 
     set { _dateOfRequest = value; } 
    } 
+2

Bu yaklaşımın dezavantajı, alandaki depolanmış tarihin, örnek oluşturulduğunda, veritabanına ne zaman kalıcı olduğunu göstermeyeceğidir. Bu küçük bir fark, ancak uygulamanıza bağlı olarak önemli olabilir. – edsobo