【问题标题】:Common Columns in ADO.NET EntitiesADO.NET 实体中的常用列
【发布时间】:2010-10-13 17:29:40
【问题描述】:

在使用 EDMX 设计器时,是否有办法将各种表中的公共列提取到 ADO.NET 实体框架中的单个基类中?例如,我的数据库中的每个表都有一个“LastUpdatedBy”和“LastUpdatedDate”列,这是审计所必需的。我想在我生成的 ObjectContext 的“SavingChanges”事件中自动设置这些值,而不需要转换为单个实体类型。请参阅此How to: Execute Business Logic When Saving Changes (Entity Framework) 的示例。您可以在示例中看到它们如何转换为实体以访问各种属性。我希望能够只使用一次基本类型(如果它属于该类型)并设置属性。

【问题讨论】:

    标签: entity-framework .net-3.5 inheritance


    【解决方案1】:

    恐怕可能不会 - 据我了解,EDMX 设计器将为每个表/实体生成一个(尽管是部分)类,并且您不能真正将任何公共基表“注入”到混合。

    您可以调查的可能是将您的公共数据放入接口 (ICommonData),然后让类实现该接口。

    但不确定如何将该接口注入 EDMX 设计者的流程:-(

    马克

    【讨论】:

      【解决方案2】:

      看看this article。它适用于 LINQ to SQL,但可以按照this article 的方式轻松适应 EF。第一个处理您的场景,其中所有表都有所需的审计列,第二个考虑为整个数据库使用单个审计表,并为每次更改保留新旧值。

      我被困在两者之间,因为第二种方法无法识别新添加的记录,但第一种方法没有更改历史记录。不得不在一个应用程序中实现两种审计策略让我感到不舒服,而且我需要一个 CreatedOn 值,所以我必须至少使用第一种方法。

      顺便说一句,如果您像我一样发现 XML 序列化是一种笨拙的方式来存储对象状态的历史记录,您可以查看这个 EF specific solution,它使用 AuditValues 详细信息表来存储更改属性的新旧值,但是这个根本不审核插入。

      【讨论】:

        【解决方案3】:

        它会审核插入 - 但请阅读第 1 部分以了解我为什么以一种从后到前的方式进行审核(我明白你为什么说它不...而且它没有插入“插入”审计记录,但审计线索仍然存在);

        http://blogs.msdn.com/b/simonince/archive/2009/04/20/auditing-data-changes-in-the-entity-framework-part-1.aspx

        西蒙

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-04
          • 1970-01-01
          • 1970-01-01
          • 2016-06-29
          相关资源
          最近更新 更多