Nutshell:WCF 数据服务的实体框架提供程序分别直接从 DbContext 的命名空间和类名中提取架构命名空间和 EntityContainer 名称。这也适用于使用代码优先方法开发的 DbContext。
有没有办法在事后修改这个提供者的行为——也就是说,不修改类名或 EDM(X)?
背景/警告/意见:这是原型设计的一种方便行为,但在生产场景中,类名本身就是一个实现细节,应该对服务消费者隐藏。
此外,在我的情况下,无法更改名称,因为我使用的框架提供了一个非常通用的 DbContext,然后我正在编写/扩展它。
请注意,我不是在讨论在数据模型的 CLR 和 EDM 表示之间创建更多“空间”的方法。相反,我正在寻找一种方法来修改DataService<T>
扩展本身的行为,以便内部 CLR 命名空间和 DbContext 扩展类名(保存在 EDM 中,这完全没问题)不会暴露在外部。
服务元数据中的具体定制点(custom-ns 和 custom-container 下面):
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<Schema Namespace="<custom-ns>" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityType Name="EgEntity">
.
.
.
</EntityType>
.
.
.
<EntityContainer Name="<custom-container>" m:IsDefaultEntityContainer="true">
<EntitySet Name="EgEntity" EntityType="<custom-ns>.EgEntity" />
.
.
.
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>