は私が自動的に Entity Frameworkのコアを持つ作成しと修正フィールドを持っていると思います。私はhereの解決策を見つけてそれに従った。Entity Frameworkのコア - CreatedTimeガットヌルアップデート
それはデータ -
を追加するしかし、私は、(更新時間は完璧ですが、ヌルなったときに作成)のデータを更新しようとしていますし、私はthis-のような問題を取得していた場合のために完璧に働いています
ので、作成するプロパティが失われてしまった(ヌルに設定してください)
this-public class BaseEntity
{
[Key]
public long Id { get; set; }
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss.fff}", ApplyFormatInEditMode = true)]
public DateTime? CreatedTime { get; set; }
public long CreatorUserId { get; set; }
//public string CreatorIPAddress { get; set; }
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss.fff}", ApplyFormatInEditMode = true)]
public DateTime? LastModifiedTime { get; set; }
public long LastModifireUserId { get; set; }
//public string LastModifireIPAddress { get; set; }
}
そしてDbContextクラスthis-
public class ApplicationDbContext : DbContext
{
//List all tables here
public DbSet<Advertisement> Advertisements { get; set; }
public DbSet<Address> Addresses { get; set; }
public DbSet<Country> Countries { get; set; }
public DbSet<EducationResult> EducationResults { get; set; }
public DbSet<Experience> Experiences { get; set; }
public DbSet<JobCircular> JobCirculars { get; set; }
public DbSet<Language> Languages { get; set; }
public DbSet<Reference> References { get; set; }
public DbSet<Research> Researches { get; set; }
public DbSet<ResearchDegree> ResearchDegrees { get; set; }
public DbSet<TeacherApplication> TeacherApplications { get; set; }
public DbSet<Training> Trainings { get; set; }
//Configure Database Settings
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//Configuration.GetConnectionString("DefaultConnection");
optionsBuilder.UseSqlite("Filename=./applicationDB.db");
}
public override int SaveChanges()
{
AddTimestamps();
return base.SaveChanges();
}
public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
AddTimestamps();
return base.SaveChanges(acceptAllChangesOnSuccess);
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
AddTimestamps();
return base.SaveChangesAsync(cancellationToken);
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
{
AddTimestamps();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
private void AddTimestamps()
{
var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));
/*
var currentUsername = !string.IsNullOrEmpty(System.Web.HttpContext.Current?.User?.Identity?.Id)
? HttpContext.Current.User.Identity.Id
: -1; //-1 for Anonimous
*/
long currentUserId = -1; //-1 for Anonimous
foreach (var entity in entities)
{
if (entity.State == EntityState.Added)
{
((BaseEntity)entity.Entity).CreatedTime = DateTime.UtcNow;
((BaseEntity)entity.Entity).CreatorUserId = currentUserId;
//((BaseEntity)entity.Entity).CreatorIPAddress = HttpContext.Connection.RemoteIpAddress.ToString();
}
else
{
((BaseEntity)entity.Entity).CreatedTime = ((BaseEntity)entity.Entity).CreatedTime;
((BaseEntity)entity.Entity).CreatorUserId = ((BaseEntity)entity.Entity).CreatorUserId;
//((BaseEntity)entity.Entity).CreatorIPAddress = ((BaseEntity)entity.Entity).CreatorIPAddress;
}
((BaseEntity)entity.Entity).LastModifiedTime = DateTime.UtcNow;
((BaseEntity)entity.Entity).LastModifireUserId = currentUserId;
//((BaseEntity)entity.Entity).LastModifireIPAddress = HttpContext.Connection.RemoteIpAddress.ToString();
}
}
public DbSet<ApplicationManagement.DbModel.Office> Office { get; set; }
}
のようなものであるように私のBaseEntityクラスがある
誰も助けてくださいことはできますか?
私はビューモデルとしてエンティティモデルを使用しています。 –
FWIW、修正されたdatetimeを自動的に更新するためには、次のようなものが必要です。作成されたものはデフォルトでよりうまく処理しなければなりません: 'public DateTime CreatedTime {get;セット; } = DateTime.UtcNow; ' –
あなたはどのようにレコードを照会し更新しているのか投稿してください。上記のコードは書かれているようにエラーを表示していません。 – Smit