我在使用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中保存派生类型?
答案 0 :(得分:1)
答案是contex.AddObject("Animals", dogInstance)
。
最初我得到了错误,但错误只是说导航属性名称错误,但实体集名称错误。它确实是。所以我修好它,现在保存工作正常(狗被保存到动物和狗桌上)。
答案 1 :(得分:0)
如果没有dog实体,无论添加什么引用,都不会有AddToDogs()方法,EF不知道如何自动将派生类型映射到实体。您可以创建将一个对象映射到另一个对象的函数,也可以使用AutoMapper
之类的工具如果我过于字面意思地提出您的问题并且您采用的是代码优先方法,那么在EF中解释继承和关联时请查看this