我有一个代码优先模型:
public class Organization
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public DateTime Created { get; set; }
[Required]
public DateTime Updated { get; set; }
}
我希望无论何时创建/更新模型,都会自动分配创建/更新日期。我已经看到了一些在上下文中执行此操作的示例,但似乎错误。这样做的正确方法是什么?
例如,在Django中,我可以使用django.models.signals.pre_save
或django.models.signals.post_save
来修改保存前/后的对象。
或者我是否认为这一切都错了,我应该一起使用另一种方法?
答案 0 :(得分:6)
是的,您可以插入自定义的OnUpdate和OnCreate逻辑。您需要覆盖SaveChanges()
并添加我们将调用Entity
的抽象类。然后在模型类中继承Entity
,这意味着现在可以在模型中调用OnUpdate / OnCreate函数,这些函数将自动注入。
以下是您的示例的样子。
<强> YourDataContext.cs 强>
namespace YourProject.Models
{
public class YourDataContext : DbContext
{
public DbSet<Organization> Organizations { get; set; }
public override int SaveChanges()
{
var changedEntities = ChangeTracker.Entries();
foreach (var changedEntity in changedEntities)
{
if (!(changedEntity.Entity is Entity)) continue;
var entity = (Entity)changedEntity.Entity;
switch (changedEntity.State)
{
case EntityState.Added:
entity.OnBeforeInsert();
break;
case EntityState.Modified:
entity.OnBeforeUpdate();
break;
}
}
return base.SaveChanges();
}
}
public abstract class Entity
{
public virtual void OnBeforeInsert() { }
public virtual void OnBeforeUpdate() { }
}
}
<强> Organization.cs 强>
public class Organization : Entity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public DateTime Created { get; set; }
[Required]
public DateTime Updated { get; set; }
public override void OnBeforeInsert()
{
this.Created = DateTime.Now;
this.Updated = DateTime.Now;
}
public override void OnBeforeUpdate()
{
this.Updated = DateTime.Now;
}
}
答案 1 :(得分:-1)
这个怎么样
[DatabaseGenerated(DatabaseGeneratedOption.Identity), DataMember]
public DateTime Created{ get; private set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity), DataMember]
public DateTime Updated{ get; private set; }