如何在实体框架中保存派生类型(TPT)?

时间:2010-04-22 09:12:16

标签: c# entity-framework inheritance

我在使用Entity Framework将派生类型(TPT)保存到数据库时遇到了问题。

假设我有基本实体Animal和派生类型Dog。

我想保存Dog实体。

我认为我可以像contex.AddToDogs()那样做,但是contex只包含基本实体 - Animal。所以我只能保存动物对象 - contex.AddToAnimals()

我也试过了contex.AddObject("Animals", dogInstance),但我收到以下错误:

The member with identity 'NavigationProperty' does not exist in the metadata collection.

但我已将EntityReference添加到“NavigationProperty”。

那么如何在EF中保存派生类型?

2 个答案:

答案 0 :(得分:1)

答案是contex.AddObject("Animals", dogInstance)

最初我得到了错误,但错误只是说导航属性名称错误,但实体集名称错误。它确实是。所以我修好它,现在保存工作正常(狗被保存到动物和狗桌上)。

答案 1 :(得分:0)

如果没有dog实体,无论添加什么引用,都不会有AddToDogs()方法,EF不知道如何自动将派生类型映射到实体。您可以创建将一个对象映射到另一个对象的函数,也可以使用AutoMapper

之类的工具

如果我过于字面意思地提出您的问题并且您采用的是代码优先方法,那么在EF中解释继承和关联时请查看this