将DBContext实体绑定到.Net Core上的模型



我有一个模型类,如下所示:

public class ProductsViewModel
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool IsActive{ get; set; }
}

下面是实体:

[Table("Products")]
public partial class Products
{    
[Column("ProductId")]
public int ProductId { get; set; }
[Column("ProductName")]
public string ProductName{ get; set; }
[Column("IsActive")]
public bool IsActive { get; set; }
}

我使用下面的LINQ查询获取结果,它返回正确的数据:

List<Products> productData = _context.Products
.Where(x => x.IsActive == true).ToList();

现在,我想将这个数据,即productData与我的模型绑定,类似于ProductsViewModel = productData

我知道我可以循环使用productData记录并为模型属性赋值,但我正在寻找一种直接的方法来映射这两者。

有没有什么快速的wat可以把所有的productData分配给我的模型?

是否有任何快速的wat来获取分配给我的模型的所有productData

有几个。您可以使用Automapper,如另一个答案中所述,也可以使用Automapper。对于更复杂的映射,您可以为所需的任何奇异映射配置Automapper配置文件。

对于使用=的直接赋值,就像你在问题中举例说明的那样,我认为对于不太复杂的实体来说,这可能是一种更简单的方法,你可以通过重载ProductsViewModel类中的赋值运算符来实现:

public class ProductsViewModel
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool IsActive { get; set; }
public static implicit operator ProductsViewModel(Products obj)
{
return new ProductsViewModel()
{
ProductName = obj.ProductName,
IsActive = obj.IsActive,
ProductId = obj.ProductId,
};
}
}

现在你的直接任务就可以了。

例如,使用Select和强制转换也是可能的,因为运算符重载:

var productsViewModels = _context.Products.Where(x => x.IsActive)
.Select(x => (ProductsViewModel)x).ToList();

或显式直接分配:

var productsViewModels = _context.Products.Where(p => p.IsActive)
.Select(x => { ProductsViewModel model = x; return model; }).ToList();

这里有一些运行代码,为了方便您可以查阅。

您可以使用映射框架,我使用最多的是Automapperhttps://docs.automapper.org/en/stable/Getting-started.html.

public class AClass {
private readonly IMapper _mapper;
private readonly ADbContext _dbContext;
public AClass (IMapper mapper, ADBContext dbContext)
{
_mapper = mapper;
_dbContext = dbContext;
}
public async Task<IEnumerable<ProductViewModel>> AMethod()
{
var dbProducts = await _dbContext.Products.Where(x => x.IsActive == true).ToListAsync();
return dbProducts.Select(x => _mapper.Map<ProductViewModel>(x))
}
}

相关内容

  • 没有找到相关文章

最新更新