我想用一些非对称类型映射编写实体框架提供程序。 在我的例子中,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) { }
我在哪里告诉驱动程序使用我的自定义代码在类型之间进行转换?
任何帮助表示赞赏。
答案 0 :(得分:0)
实际上,我发现的唯一方法是重写所有提供者。
公共覆盖TypeUsage GetEdmType(TypeUsage storeType)位于提供者清单中(DbProviderManifest的实现)。要实现它,您无法从SqlServer实现派生,因为实际上实现是私有的。无论如何,您可以根据许可证使用源代码(您可以使用SQL Server的EF提供程序或您可以在Internet上找到的其他EF提供程序)。 一旦你有了DbProviderManifest实现,你需要让EF使用它。
EF通过方法DbProviderServices.GetProviderManifest检索清单,因此您还需要重写DbProviderServices实现。
依此类推,直到我重写了所有提供者。