EFCore CreatedAt字段默认值

时间:2020-04-05 14:58:48

标签: entity-framework entity-framework-core ef-core-3.1

我将EFCore 3.1用作项目的主要ORM,并尝试在保存时自动在模型上设置CreatedAt(DateTime)属性。一切看起来都很好并且可以正常工作,但是如果创建实体时已经设置了该值,我会尝试自动跳过该值,如下所示:

                s = new Session{
                    Visitor = v,
                    Property = db.Properties.Find(property_id),
                    CreatedAt = DateTime.UtcNow.AddSeconds(-1)
                };
                await this.db.Sessions.AddAsync(s);
                await this.db.SaveChangesAsync();

我在数据库上下文中的功能如下。我的问题是,即使我手动设置了IsModified值也始终为false。如何检查CreatedAt属性是否已设置。

    private void OnBeforeSaving()
    {
        var entries = ChangeTracker.Entries();
        foreach (var entry in entries)
        {
            if (entry.Entity is ITrackable trackable)
            {
                var now = DateTime.UtcNow;
                var user = GetCurrentUser();
                switch (entry.State)
                {
                    case EntityState.Modified:
                        trackable.LastUpdatedAt = now;
                        trackable.LastUpdatedBy = user;
                        break;

                    case EntityState.Added:
                        if (!entry.Property("CreatedAt").IsModified){ /* IsModified always false regardless */
                            trackable.CreatedAt = now;
                        }
                        trackable.CreatedBy = user;
                        trackable.LastUpdatedAt = now;
                        trackable.LastUpdatedBy = user;
                        break;
                }
            }
        }
    }

0 个答案:

没有答案