gpt4 book ai didi

c# - 在实体和它的代理类型之间转换

转载 作者:行者123 更新时间:2023-11-30 22:27:06 26 4
gpt4 key购买 nike

关于如何使用实体(例如 EF 实体和将绑定(bind)到 UI 的代理类型),我遇到了一些问题。

假设我有以下类(class)

    // 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; }
}

现在我将得到 List<Car>来自 db 并想创建一个 List<SurrogateCar>代表我的实体。我可以通过多种方式轻松做到这一点,其中之一是这样的:

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

或者我可以编写自定义转换方法。但我担心的是性能。这个方法会被频繁调用,所以创建一个列表并一个一个地填充它对我来说似乎是一个潜在的问题。

你有没有更好的方法来做到这一点,或者这样使用它可以吗?

谢谢。

最佳答案

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

var cars = from c in context.Cars where {your condition}
select new SurrogateCar
{
Brand=c.Brand,
Name=c.Name
};

另一方面,如果您始终需要汽车列表,那么正如 Roger 指出的那样,AutoMapper 非常棒!你只要打电话

  CreateMap<Car, SurrogateCar>

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

  surrogates.AddRange(Map<IEnumberable<Car>, IEnumerable<SurrogateCar>>(cars));

关于c# - 在实体和它的代理类型之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433476/

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