每当我尝试将数据插入数据库时,我都无法获得当前日期,并且在视图中我隐藏了该特定字段。现在每当我向数据库插入一些数据时,应自动插入创建日期。
这是我的savechanges方法。
public override int SaveChanges()
{
var entities = ChangeTracker.Entries()
.Where(x => x.Entity is DocumentMaster &&
(x.State == EntityState.Added || x.State == System.Data.EntityState.Modified));
var currentUsername = "Anonymous";
foreach (var entity in entities)
{
if (entity.State == EntityState.Added)
{
((DocumentMaster)entity.Entity).CreatedDate = DateTime.Now;
((DocumentMaster)entity.Entity).CreatedBy = currentUsername;
}
}
return base.SaveChanges();
}
}
这是我的界面。
interface DocumentMaster
{
string CreatedBy { get; set; }
DateTime CreatedDate { get; set; }
}
这是我的班级
public partial class ts_upld_doc
{
public ts_upld_doc()
{
this.tr_upld_content = new HashSet<tr_upld_content>();
}
public int upld_docid { get; set; }
public int usr_createdby { get; set; }
public Nullable<System.DateTime> upld_createddate { get; set; }
}
我在课堂上需要ti工具界面吗?我试图实施,但它没有用。有谁能建议我这个?
答案 0 :(得分:1)
详细说明“在数据库中自动设置”解决方案:
在实体模型类中设置CreationDate属性:
public class MyPersistableEntity {
public MyPersistableEntity() {
// initialize in ctor so behaviour is the same for freshly created and loaded entities
CreationDate = DateTime.Now;
}
[Required, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreationDate { get; set; }
}
告诉SQL Server在实体迁移中使用此列的默认值:
public partial class UseUtcDateAsDefault : DbMigration {
public override void Up() {
// auto generated date for CreationDate
AlterColumn("dbo.MyPersistableEntity ", "CreationDate",
c => c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"));
}
}
答案 1 :(得分:0)
上面的解决方案很好并且工作正常但是如果你更新相同的记录,那么日期将被修改为最新的日期和时间。 我有简单的解决方案。在创建视图中,写下以下代码:
@Html.HiddenFor(model => model.EntryDateTimeStamp, Model.EntryDateTimeStamp = DateTime.Now)
并在控制器中,只需传递新对象:
public ActionResult Create()
{
return View(new MaterialType());
}
避免在编辑视图中修改日期:
@Html.HiddenFor(model => model.EntryDateTimeStamp, Model.EntryDateTimeStamp = Model.EntryDateTimeStamp)
无需覆盖任何方法。