首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体与其代理类型之间的转换

实体与其代理类型之间的转换
EN

Stack Overflow用户
提问于 2012-07-11 13:12:49
回答 3查看 3.2K关注 0票数 2

我有一些关于如何与实体一起工作的问题,比如EF实体和代理类型,这将绑定到UI。

假设我有以下课程

代码语言:javascript
运行
复制
    // Db Entity
    public class Car
    {
        public virtual int Id { get; set; }
        public string ChassisNumber { get; set; }
        public virtual string Brand { get; set; }
        public virtual string Name { get; set; }
    }

    // Surrogate type that reflects some properties of Car entity
    // This class will be bound to UI
    public class SurrogateCar
    {
        public string Brand { get; set; }
        public string Name { get; set; }
    }

现在,我将从db获得List<Car>,并希望创建一个代表我的实体的List<SurrogateCar>。我可以很容易地做到这一点,其中之一是这样的:

代码语言:javascript
运行
复制
      List<Car> cars = CarTable.GetMyCars(); // Just a dummy method, suppose it returns all entities from Db.

      List<SurrogateCar> surrogates = new List<SurrogateCar>();

      foreach (var car in cars)
      {
           surrogates.Add(new SurrogateCar { Brand = car.Brand, Name = car.Name });
      }

或者我可以写一个定制的转换方法。但我担心的是表演。这个方法将经常被调用,所以创建一个列表并一个一个地填充对我来说是一个潜在的问题。

你有什么更好的方法来做这件事,还是可以这样使用它?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-11 13:56:58

如果您有一个web服务,并且该服务总是要返回SurrogateCar类,那么您可以编写实体查询来返回您想要的类,而不是获取您不想要的类:

代码语言:javascript
运行
复制
var cars = from c in context.Cars where {your condition}
           select new SurrogateCar
           {
               Brand=c.Brand,
               Name=c.Name
           };

另一方面,如果你总是需要汽车清单,那么正如罗杰所指出的那样,AutoMapper是伟大的!你只要打电话

代码语言:javascript
运行
复制
  CreateMap<Car, SurrogateCar>

然后,只需使用Automapper来填充新列表:

代码语言:javascript
运行
复制
  surrogates.AddRange(Map<IEnumberable<Car>, IEnumerable<SurrogateCar>>(cars));
票数 2
EN

Stack Overflow用户

发布于 2012-07-11 13:21:42

不要担心你的表现,直到你真正衡量,这是你的瓶颈!很可能不同类型之间的映射没有那么慢。

还有一些工具(如AutoMapper http://automapper.org/ ),它的主要目的不是性能,而是为了使您编写更容易、更少的代码。

票数 1
EN

Stack Overflow用户

发布于 2012-07-11 13:18:05

我相信您真正想要的是AutoMapper,它允许在这种情况下编写无缝、简单的代码。除非你需要担心,否则我不会太担心演出。

下面是关于使用automapper映射列表的说明,也是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11433476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档