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