我的webapi应用程序设置为使用MessageHandler
根据请求标头设置数据库连接来处理多个数据库连接。然后我在创建上下文时使用此连接实例。这部分效果很好。
但是,我在大多数需要上下文的实体上都有[NotMapped]
属性,这样我就可以对db运行一个额外的查询(显然,实体来自同一个db)。
问题是,似乎webapi在意识到它具有未映射的属性之前完成了请求,然后返回管道以检索该属性。但是,在那时,我退出了我的消息处理程序,我的连接实例不再设置,当我尝试在属性getter中创建上下文时,我从连接实例获得NullRefException
。
这就是我在脑海中看到的:
我的第一个想法是,必须有一种从实体获取上下文的方法。但是,在EF6中,all Entities are simply POCOs which have no knowledge of their context.(参见第一条评论)
我唯一想到的就是在每个实体中手动设置上下文的实例,以便我可以在NotMapped
属性中引用它,但这看起来似乎是粗略的。< / p>
我是以错误的方式看待这个吗?
对解决方案的任何建议? (或者可能有关如何实际处理NotMapped
属性的说明?)
编辑:进一步检查时,JSON序列化过程似乎抛出了错误。 (Newtonsoft.Json.JsonSerializationException
)因此似乎在序列化期间评估返回的IQueryable,然后它尝试评估[NotMapped]
属性,并因连接实例不再存在而失败。
我必须假设我想要完成的事情是可能的,我现在还不确定如何。 基本上我需要`[NotMapped]'属性来了解创建实体的上下文。 建议非常感谢!
答案 0 :(得分:0)
我不认为这是最好的解决方案,但由于还没有人提出任何其他建议,我发布了迄今为止我提出的建议:
我最终做的是将一个connectionString变量添加到我的所有实体派生的pygame.display.update()
类中。在BaseEntity
构造函数中,我在创建实体时将此属性设置为当前正在使用的连接字符串(此时在范围内)。
然后,只要稍后访问我的BaseEntity
属性(用于反序列化或其他方式),我引用实体上的连接属性来创建我的上下文。
这样的事情:
[NotMapped]
到目前为止,这似乎工作得很好,我认为这将是我的解决方案。请随时建议任何备用/改进的解决方案。