Вы не можете использовать частные модификаторы, потому что сам EF должен устанавливать ваши свойства, когда он загружает вашу сущность, и Code First может делать это только тогда, когда свойство имеет открытый установщик (в отличие от EDMX, где возможны частные установщики (1 ) , (2) ).
То, что вам нужно сделать, это пометить ваш для CreatedDate
с DatabaseGeneratedOption.Identity
и ваш AmendDate
с DatabaseGeneratedOption.Computed
. Это позволит EF правильно загружать данные из базы данных, перезагружать данные после вставки или обновления, чтобы сущность была актуальна в вашем приложении, и в то же время не позволит вам изменять значение в приложении, поскольку значение установлено в приложение никогда не будет передано в базу данных. С объектно-ориентированной точки зрения это не очень хорошее решение, но с точки зрения функциональности это именно то, что вам нужно.
Вы можете сделать это либо с аннотациями данных:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime CreatedDate { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime AmendDate { get; set; }
Или с беглым API в OnModelCreating
переопределить в производном контексте:
modelBuilder.Entity<YourEntity>()
.Property(e => e.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<YourEntity>()
.Property(e => e.AmendDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);