首页 文章

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

提问于
浏览
1

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

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

我想保存Dog实体 .

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

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

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

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

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

2 回答

  • 0

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

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

  • 1

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

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

相关问题