泛型和实体框架

时间:2013-01-16 18:52:46

标签: c# vb.net entity-framework generics entities

在我的数据库中,每个表的末尾有5个字段:

  • 国家
  • CreatedDate
  • CreatedBy
  • ModifiedDate
  • ModifiedBy

我正在使用实体框架为数据库生成POCO对象。 我有Dal层来处理所有的CRUD操作。

不断复制和粘贴相同的代码以填充5个字段是一件痛苦的事。 我想知道是否有人有一个可以处理任何实体对象的通用方法并为我填写字段。

1 个答案:

答案 0 :(得分:2)

您应该实现具有这些属性的公共基类,并从该基类派生您的POCO类。

您可以通过覆盖上下文类中的SaveChanges()来自动处理诸如Create / ModifiedDate和User之类的设置。这使得对象消费者无需在消费类的任何地方设置这些属性。

以下是我的一个项目中的那种代码示例(在我的例子中,具有LastModified属性的对象实现了IHasLastModified接口):

    public override int SaveChanges()
    {
        DateTime now = DateTime.UtcNow;
        foreach (ObjectStateEntry entry in (this as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
        {
            if (!entry.IsRelationship)
            {
                IHasLastModified lastModified = entry.Entity as IHasLastModified;
                if (lastModified != null)
                    lastModified.LastModified = now;
            }
        }

        int changes = base.SaveChanges();
        return changes;
    }