C# 在wcf中,将数据契约映射到实体框架的实体是一项代价高昂的操作吗

C# 在wcf中,将数据契约映射到实体框架的实体是一项代价高昂的操作吗,c#,.net,entity-framework,wcf,C#,.net,Entity Framework,Wcf,当将EF与wcf一起使用时,会遇到这样一种情况,即我需要将实体映射到数据契约,反之亦然,因为EF对象承载着EF提供的额外数据。所以尝试了一些映射函数 [DataContract] public class WebsitesD { [DataMember] public int Id { get; set; } [DataMember] public string Domain { get; set; } [DataMember] public st

当将EF与wcf一起使用时,会遇到这样一种情况,即我需要将实体映射到数据契约,反之亦然,因为EF对象承载着EF提供的额外数据。所以尝试了一些映射函数

[DataContract]
public class WebsitesD
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string Domain { get; set; }
    [DataMember]
    public string UserId { get; set; }
    [DataMember]
    public string Title { get; set; }
}

private WebsitesD mapWebsite(Website w)
    {
        WebsitesD wd = new WebsitesD();
        wd.Id = w.Id;
        wd.Title = w.Title;
        wd.UserId = w.UserId;
        wd.Domain = w.Domain;
        return wd;
    }
  public int insertWebsite(WebsitesD d)
    {
        try
        {
            using (MyInfoEntities entities = new MyInfoEntities())
            {
                entities.Websites.Add(mapWebsite(d));
                entities.SaveChanges();
                return 1;
            }

        }
        catch (Exception e)
        {
            throw e;
        }
    }
其中WebsitesD是我的数据契约,而Web是实体对象。有了这一点,我可以实现我的目标,但问题是,每当我需要执行任何数据库操作时,我都需要进行映射,我认为这可能是代价高昂的操作


我应该离开实体框架,使用ADO.net,因为我不需要在那里做任何映射。请告诉我该采用哪种方法的利弊

与任何ORM一样,性能和开发人员生产力之间存在权衡。正如您所说,ADO.NET将是从datareader/dataset填充数据契约的最快方法,使用EF/NHibernate,您将始终遇到这种情况。然而,映射对于单个实体来说并不昂贵,当映射实体列表时,它会变得昂贵。如果您根本不需要映射,您还可以将[DataContract]放在实体类上,[DataMember]放在wcf希望发送给客户端的成员上。但是,当您的EF代码在模式更改时自动生成时,这一切都会消失。 你也可以选择

另一种涉及较少映射编码的方法是使用AutoMapper


此外,在ORM上也有很好的线程权衡

做对代码库最有利的事情。考虑维修性和生产率。服务器便宜,开发人员昂贵。世界上很少有公司具有这样的规模,值得维护更复杂的代码,而不是购买另一台服务器。

使用EF 6,您可以使用支持WCF的代码生成项EF 6.x DbContext Generator。

只需右键单击EDMX的设计器并转到添加代码生成项…

单击左侧的联机并搜索数据库上下文。

使用此选项将在类中自动生成DataMemberDataContract属性。 此外,您可能需要删除使用edmx生成的常规模板,或者您将有两组实体