虽然使用带有wcf的EF遇到了我需要将实体映射到数据协定的情况,反之亦然,因为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是我的数据合同,网站是实体对象。有了这个,我可以实现我的目标,但问题是,每当我需要执行任何数据库操作,我需要做映射,我认为可能是昂贵的操作。
我应该离开实体框架并使用ADO .net,因为我不需要在那里进行任何映射。请建议我应该采取哪种方法的利弊。
答案 0 :(得分:0)
与任何ORM一样,性能和开发人员生产力之间存在权衡。正如您所说,ADO.NET将是从datareader / dataset填充数据合同的最快方法,使用EF / NHibernate,您将始终遇到这种情况。但是,对于独立实体,映射并不昂贵,当您映射实体列表时它会变得很昂贵。如果您根本不需要映射,您还可以将[DataContract]放在实体类上,并将[DataMember]放在要发送给客户端的成员上。但是当您的架构发生变化时自动生成EF代码时,就会全部消失。 您也可以选择EF Code First approach.
另一种涉及较少编码映射的方法是使用AutoMapper Check this out
ORM权衡here
也有很好的线索答案 1 :(得分:0)
为代码库做最好的事情。考虑可维护性和生产力。服务器很便宜而且开发人员很贵。世界上很少有公司规模如此之大,以至于值得维护更复杂的代码,而不是购买另一台服务器。
答案 2 :(得分:0)