STW*_*STW 13 .net c# automapper entity-framework-4 wcf-data-services
我们通过WCF数据服务公开域模型.该模型源自EF4,需要一些额外的工作才能使其成为通过Web服务发布所需的形式.
我想在EF4之外处理这个问题,以使我们的EDMX专注于模型,而不是它的用法.我的想法是创建一个专门用于Web服务的自定义"ServiceModel",并包含特定于服务的问题.
我的问题是如何在WCF数据服务中间最好地连接自动播放器.我正在使用WCF数据服务与ServiceModel的自定义(基于反射)提供程序.我在哪里可以将OData查询(对于ServiceModels)转换为EF4查询(对于DomainModels),并将结果映射回ServiceModels?
Ced*_*icB 22
我在WCF服务中使用Automapper从数据库实体映射到数据协定.对于每个服务,我使用InitializeMap的方法创建一个静态AutomapBootstrap类.然后,对于每个服务,我使用AutomapServiceBehavior属性修饰服务.
我不知道这是否适用于您的场景,因为WCF数据服务与使用WCF WebBindings的vanilla WCF SOAP服务和服务略有不同.
不过,值得一看.
这是服务行为
[CoverageExclude(Reason.Framework)]
public sealed class AutomapServiceBehavior : Attribute, IServiceBehavior
{
public AutomapServiceBehavior()
{
}
#region IServiceBehavior Members
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
AutomapBootstrap.InitializeMap();
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
这是我的映射器
public class AutomapBootstrap
{
public static void InitializeMap()
{
Mapper.CreateMap<CreateBookmarkRequest, TagsToSaveRequest>()
.ForMember(dest => dest.TagsToSave, opt => opt.MapFrom(src => src.BookmarkTags))
.ForMember(dest => dest.SystemObjectId, opt => opt.UseValue((int)SystemObjectType.Bookmark))
.ForMember(dest => dest.SystemObjectRecordId, opt => opt.Ignore());
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我将服务连接到automap的方法
[AutomapServiceBehavior]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Clouds : ICloudService
{
// service operation implementation details elided
}
Run Code Online (Sandbox Code Playgroud)
最后说明,我的服务是一个使用WebBinding的vanilla WCF服务,并以REST风格的方式提供数据.
| 归档时间: |
|
| 查看次数: |
10505 次 |
| 最近记录: |