用户类:
public class User
{
public DateTime CreatedDate { get; private set; }
public DateTime? AmendDate { get; private set; }
}
我需要列CreatedDate
和AmendDate
具有数据库生成的值(now()
命令)
在互联网上阅读一些文章,建议我在DbContext
课程中使用OnModelCreating
方法:
Property(p => p.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.AmendDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
但是没有用,说错误is supported types are rowversion and timespan
。
您如何处理这些属性类型?
任何提示?
答案 0 :(得分:1)
您可以使两列都为空,并使用空值保存两列的更改。您还需要在数据库的相关列中将列的默认值设置为getdate()
。如果您尝试插入空值,则会自动使用当前日期填充这些列。但EF不会使用数据库生成的日期值更新属性。
其他解决方案是在调用SaveChanges()
方法
public override int SaveChanges()
{
var changeSet = ChangeTracker.Entries<User>();
if (changeSet != null)
{
foreach (var entry in changeSet
.Where(c => c.State == EntityState.Added || c.State == EntityState.Modified))
{
entry.Entity.CreatedDate = entry.Entity.AmendDate = DateTime.Now;
}
}
return base.SaveChanges();
}