使用非对称类型映射编写支持EF的ADO.NET提供程序

时间:2014-04-15 14:43:13

标签: entity-framework ado.net

我想用一些非对称类型映射编写实体框架提供程序。 在我的例子中,EDM端的整数数组应该作为sql文本查询中的字符串发送到数据库。

在我看来,MS documentation缺乏清晰度和样本:

  

编写具有非对称类型映射的提供程序

     

为Entity Framework编写数据存储提供程序时,   某些类型的EDM到提供者类型映射可能不同   provider-to-EDM类型映射。例如,无限制的EDM   PrimitiveTypeKind.String可以映射到提供程序上的nvarchar(4000),   而nvarchar(4000)映射到EDM   PrimitiveTypeKind.String(的MaxLength = 4000)。

     

您编写的XML文件包含两个部分:

     
      
  • 以EDM术语表示的提供商类型列表,并定义两个方向的映射:EDM到提供商和提供商到EDM。

  •   
  • 提供商支持的功能列表,其中参数和返回类型以EDM术语表示。

  •   

到目前为止我做了什么:

  • 我准备好了从整数数组到字符串的代码。
  • 我写过清单:

                                
     

  • 我已将代码添加到:

public override TypeUsage GetEdmType(TypeUsage storeType) { }

我在哪里告诉驱动程序使用我的自定义代码在类型之间进行转换?

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

实际上,我发现的唯一方法是重写所有提供者。

公共覆盖TypeUsage GetEdmType(TypeUsage storeType)位于提供者清单中(DbProviderManifest的实现)。要实现它,您无法从SqlServer实现派生,因为实际上实现是私有的。无论如何,您可以根据许可证使用源代码(您可以使用SQL Server的EF提供程序或您可以在Internet上找到的其他EF提供程序)。 一旦你有了DbProviderManifest实现,你需要让EF使用它。

EF通过方法DbProviderServices.GetProviderManifest检索清单,因此您还需要重写DbProviderServices实现。

依此类推,直到我重写了所有提供者。