C# 在wcf中,将数据契约映射到实体框架的实体是一项代价高昂的操作吗
当将EF与wcf一起使用时,会遇到这样一种情况,即我需要将实体映射到数据契约,反之亦然,因为EF对象承载着EF提供的额外数据。所以尝试了一些映射函数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
[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的设计器并转到添加代码生成项… 单击左侧的联机并搜索数据库上下文。 使用此选项将在类中自动生成DataMember和DataContract属性。 此外,您可能需要删除使用edmx生成的常规模板,或者您将有两组实体