实体框架代码优先 - 保存实体时设置属性的最佳方法是啥

Posted

技术标签:

【中文标题】实体框架代码优先 - 保存实体时设置属性的最佳方法是啥【英文标题】:Entity framework code first - What is the best approch to set property when entity is saved实体框架代码优先 - 保存实体时设置属性的最佳方法是什么 【发布时间】:2012-01-31 11:18:32 【问题描述】:

我正在使用 Entity Framework 4.1 并首先使用代码。

这是我的课

public class Dummy 
    public string Name  get; set; 
    public DateTime lastModifiyed  get; set; 

我想要做的是每次保存 Dummy 对象时,都应将 lastModifyed 属性设置为当前时间。

即使我使用像 requried 这样的属性,此代码仍然有效。

var d = new Dummy();
d.lastModifiyed = DateTime.MinValue

做这种事情的最佳实践是什么。我已经阅读了覆盖从 DbContext 继承的类中的 SaveChanges 并检查例如接口是一个很好的方法。或者我该怎么做?

【问题讨论】:

【参考方案1】:

覆盖SaveChanges 方法并在调用base.SaveChanges 之前枚举来自更改跟踪器的更改。即:

foreach (var item in (this as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted)
    .Where(entry => entry.Entity is ITracksLastModified)
    .Select(entry => entry.Entity as ITracksLastModified))

    item.LastModified = DateTime.UtcNow;

【讨论】:

以上是关于实体框架代码优先 - 保存实体时设置属性的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

尝试在没有太多运气的情况下部署实体框架代码优先应用程序?最佳部署策略?

代码优先实体框架。急切加载,验证然后保存导致错误

实体框架代码优先导航问题

实体框架+多级继承+EF代码优先

实体框架 CTP4 代码优先:映射受保护的属性

在实体框架数据库优先方法中将默认值 1 设置为实体名称(状态)