【问题标题】:How to Create Partial Classes from CodeFirst如何从 CodeFirst 创建部分类
【发布时间】:2014-05-20 16:17:05
【问题描述】:

我正在处理一个使用 EF 的应用程序,采用代码优先的方法,因此有多个域类。

我需要访问 ObjectContext.SavingChanges 以便我可以对一些新添加的业务规则进行操作。根据我在这里看到的 SO 和 Julie Lerman's book 我需要创建一个具有相同的部分类名称为 EF 生成的部分类。

我似乎找不到这些生成的 EF 类的位置。没有它,我就没有类名或命名空间可用于我的部分类实现。

问题

1.在哪里可以找到这些生成的 EF 类?

2.找到后,如果我需要访问 ObjectState.SavingChanges,我应该使用哪一个作为分部类?

【问题讨论】:

  • 在代码优先中,您希望生成什么样的类?在我们的 EF Code First 项目中,我们自己编写这些类,并允许在模型更改时迁移以更新数据库。
  • 1. “代码优先”意味着没有类生成。这意味着,您自己编写实体类。 2. 假设您正在使用DbContext API,您可以通过((IObjectContextAdapter)yourDbContext).ObjectContext 访问ObjectContext。您可以在您拥有yourDbContext 变量的任何地方执行此操作,或者从您的DbContext 派生类型内部。为此,您不需要部分课程。 3. 为什么你认为需要ObjectContext.SavingChanges 来应用业务逻辑?看起来你误会了什么。
  • @Dennis 好问题。当某些实体类中的数据发生更改时,我们需要能够在一个地方检测到它,然后更新另一个表中的日期时间字段,所以我认为 Object.SavingChanges 会对此有好处。我知道如何覆盖 SaveChanges() 但不知道 ObjectContext.SavingChanges
  • @Dennis 不,“代码优先”有点用词不当,因为名称暗示您首先创建类,但这不一定是这种情况。您可以基于现有数据库生成类。微软甚至承认该名称具有误导性:blogs.msdn.com/b/adonet/archive/2014/10/21/…

标签: c# entity-framework ef-code-first partial-classes objectcontext


【解决方案1】:

对于部分类,您只需要创建与您的 ef 类同名的新类,并且您需要在定义 ef 上下文时将它们标记为 在同一程序集中

但是,如果要访问 SavingChanges(),则需要通过扩展 ObjectContext 创建自己的类上下文,这样就可以重写 ObjectContext.SavingChanges() 来添加自己的业务流程。

希望对您有所帮助。

【讨论】:

  • “如果你想访问 SavingChanges(),你需要通过扩展 ObjectContext 创建你自己的类上下文”——不,你不需要它。这是一个公共事件,外部代码可以轻松订阅它。
  • 对不起,我的意思是 SaveChanges() 不是事件 SavingChanges(),因为您无法在 SavingChanges 事件中取消您的保存操作。
  • 这回答了我关于部分类的问题。谢谢
猜你喜欢
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多