gpt4 book ai didi

c# - 将 AutoMapper 与 WCF 数据服务和 EF4 集成的最佳实践

转载 作者:可可西里 更新时间:2023-11-01 08:05:38 28 4
gpt4 key购买 nike

我们通过 WCF 数据服务公开域模型。该模型源自 EF4,需要一些额外的工作才能使其成为通过 Web 服务发布所需的形式。

我想在 EF4 之外处理这个问题,以使我们的 EDMX 专注于模型而不是它的使用。我的想法是创建一个定制的“服务模型”,它专门用于网络服务并包含特定于服务的问题。

我的问题是如何在 WCF 数据服务中间最好地连接自动映射器。我将 WCF 数据服务与 ServiceModel 的自定义(基于反射的)提供程序一起使用。在哪里可以将 OData 查询(对于 ServiceModels)转换为 EF4 查询(对于 DomainModels),并将结果映射回 ServiceModels?

最佳答案

我在我的 WCF 服务中使用 Automapper 从数据库实体映射到数据协定。对于每个服务,我都创建了一个静态 AutomapBootstrap 类,其中包含一个 InitializeMap 方法。然后,对于每个服务,我使用 AutomapServiceBehavior 属性装饰该服务。

我不知道这是否适用于您的方案,因为 WCF 数据服务与普通 WCF SOAP 服务和使用 WCF WebBindings 的服务略有不同。

不过,还是值得一看。

这是服务行为

[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
}

这是我的映射器

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());

}
}

这就是我将服务连接到自动 map 的方式

[AutomapServiceBehavior]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Clouds : ICloudService
{
// service operation implementation details elided
}

最后一点,我的服务是使用 WebBinding 并以 REST 风格提供数据的普通 WCF 服务。

关于c# - 将 AutoMapper 与 WCF 数据服务和 EF4 集成的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com