使用Npgsql兑现代码优先模型

时间:2018-08-03 12:41:44

标签: entity-framework entity-framework-6 npgsql

我正在尝试与Npgsql提供程序一起使用缓存实体模型(在阅读https://mirkomaggioni.com/2018/01/06/performance-improvements-in-entity-framework-6-2/之后)。

dbconfiguration:

Class NpgsqlConfiguration
  Inherits System.Data.Entity.DbConfiguration
  Public Sub New()
    Dim provider = "Npgsql"
    SetProviderServices(provider, Npgsql.NpgsqlServices.Instance)
    SetProviderFactory(provider, Npgsql.NpgsqlFactory.Instance)
    SetDefaultConnectionFactory(New Npgsql.NpgsqlConnectionFactory())

    SetModelStore(New DefaultDbModelStore(Directory.GetCurrentDirectory()))
  End Sub
End Class

在第一次运行时,将生成具有有效内容的Edmx模型。 但是在第二次运行时发生异常,当我尝试从上下文访问某些数据库集时

ctx.Set(Of EntityClass).ToList()
  

System.ArgumentException:'该路径不是合法形式。'

我该如何克服?感谢您的帮助。

实体框架6.2.0,Ngpsql 4.0.2,ef.npgsql 3.2.0

1 个答案:

答案 0 :(得分:1)

我正在使用Costura.Fody作为解决方案,当我禁用它时,EF开始加载生成的模型。

不过,我没有发现任何明显的性能提升:/

  • 调用没有edmx模型的第一个查询大约需要2.4秒
  • 使用edmx模型调用第一个查询大约需要2.2秒

我在模型中有46个实体(表),可能是因为数量太少而无法找到缓存的效果。