【问题标题】:Converting Classes in Entity Framework在实体框架中转换类
【发布时间】:2012-11-21 06:50:10
【问题描述】:

我正在使用 EF5 和 Code-First。

我有一个名为 FooBase 的抽象基类。 Foo1 和 Foo2 都继承自 FooBase。我使用基于名为 Bar 的鉴别器的 EF 映射配置。因此,如果 Bar = someValue,则创建 Foo1... 如果 Bar 是 anotherValue,则创建 Foo2。

由于 Bar 是一个鉴别器,我无法将它作为任何 Foo 类的属性访问。

我现在需要将 Foo1 的实例转换为 Foo2。我使用反射并将属性移动到新实例,包括 Foo1 的键值。这是一个完全相同的副本,只是它是不同的类型。我将 EntityState 更改为已修改并保存到数据库。

但是,数据库中的鉴别器值没有得到更新。它仍然保持与 Foo1 相同的值。

我可以猜到,由于实体只设置为修改,EF 不会费心检查鉴别器。

有人知道解决这个问题的方法吗?

【问题讨论】:

    标签: entity-framework ef-code-first code-first


    【解决方案1】:

    您不能将现有实例更改为另一种类型。与键值关联的实体的类型是不可变的。如果要从 Foo1 创建 Foo2 ,则需要使用新键值创建一个新实例并将其插入数据库。只需修改将始终保留密钥和鉴别器。

    如果您真的需要更改类型并保留密钥继承不是您的解决方案。将键视为等同于引用,将鉴别器视为等同于 .NET 中的类型 - 您无法更改现有引用的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多