Я рассмотрел множество примеров, пытаясь выяснить, как автоматически установить значение CreatedDate
для каждого объекта при сохранении изменений до unitOfWork
и Repository pattern
.ASP MVC Code Сначала работает с вычисляемыми столбцами datetime
Так что у меня есть просто POCO
:
public class Partners:IAutoGenerateDateFields
{
[Key]
public int PartnerId { get; set; }
public string PartnerCode { get; set; }
public string PartnerName { get; set; }
public string CompanyName { get; set; }
public string City { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string TaxId { get; set; }
public int PartnerTypeId { get; set; }
public int PartnerStateId { get; set; }
public int LocationId { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreatedDate { get; set; }
// [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
// public DateTime ModifiedDate { get;set;}
public virtual Locations Location { get; set; }
}
Этот класс реализует интерфейс IAutoGenerateDateFields
:
interface IAutoGenerateDateFields
{
DateTime CreatedDate { get; set; }
// DateTime ModifiedDate { get; set; }
}
Наконец в моем unitOfWork
классе я проверить, если добавленная/модифицированный объект реализует выше интерфейс и установить значение CreatedDate
на текущую дату:
public void Save() {
context.ChangeTracker.DetectChanges();
var added = context.ChangeTracker.Entries()
.Where(t => t.State == EntityState.Added)
.Select(t => t.Entity).ToArray();
foreach (var entity in added) {
if (entity is IAutoGenerateDateFields) {
var track = entity as IAutoGenerateDateFields;
track.CreatedDate = DateTime.Now;
}
}
var modified = context.ChangeTracker.Entries()
.Where(t => t.State == EntityState.Modified)
.Select(t => t.Entity).ToArray();
foreach (var entity in modified) {
if (entity is IAutoGenerateDateFields) {
var track = entity as IAutoGenerateDateFields;
track.CreatedDate = DateTime.Now;
}
}
context.SaveChanges();
}
Но каждый раз, когда я нажимаю savechanges
, я получаю сообщение об ошибке CreatedDate
не может быть пустым. Таким образом, объект не устанавливается с текущей датой.
Что мне здесь не хватает?
что сделал трюк. Спасибо! – JustLearning