C# 包括产品中的实体类别
我有一项创建产品的服务:C# 包括产品中的实体类别,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我有一项创建产品的服务: public async Task <ProductDTO> CreateProduct(ProductDTO product) { Product myProduct = new Product() { //ProductId is Auto generated ProductName = product.ProductName, Price = product.Price,
public async Task <ProductDTO> CreateProduct(ProductDTO product)
{
Product myProduct = new Product()
{
//ProductId is Auto generated
ProductName = product.ProductName,
Price = product.Price,
CategoryId = product.CategoryId,
Category = product.Category
};
await _context.Products.AddAsync(myProduct);//Add Product to Products table
await _context.Products.Include(i => i.Category).ToListAsync();
await _context.SaveChangesAsync();//Save all the changes
product.ProductId = myProduct.ProductId;
return product;
}
尽管我使用了Include(I=>I.Category)
但该类别仍然为空
await _context.Products.Include(i => i.Category).ToListAsync();
实际上,我不能在我的ProductController类中使用Include()函数,因为我的控制器只引用我的ProductService类。有人能帮我解决这个问题并在我的CreateProduct服务中包含类别实体吗?
实际上,我正在尝试修复它,以便在发送post请求时,它如下所示:
{
"productId": 1,
"productName": "Milk",
"price": 2,
"categoryId": 1,
"category": null
}
{
"productId": 1,
"productName": "Milk",
"price": 2.0,
"categoryId": 1,
"category": {
"categoryId": 1,
"categoryName": "Items"
}
}
我最终通过添加以下代码行修复了它:
product.Category = myProduct.Category;
在这种情况下,邮递员中的类别不为空请花时间阅读您应用于问题的标签说明。
包含
仅影响阅读,不影响插入。您是否确定在收到ProductDTO
时,已将product.Category
填入?你试过调试你的代码吗?嗯,嘿,我注意到了。您正确地将DTO与实体隔离,但您尝试在产品
实体中分配类别
,该实体必须是产品DTO中的类别
实体,该实体应是另一个DTO。。。有些东西很臭。你有Task CreateProduct(ProductDTO product)
方法,在该方法中,你将product
作为返回返回返回,这是不必要的,因为它是类(引用类型),无论你对它做什么,它都会反映调用者。因此,您的方法defenitino可以类似于Task CreateProduct(ProductDTO product)
\u context.Products.Include(i=>i.Category.toListSync()
是一种不必要的昂贵方式,只能获得您想要的一个类别。无论如何,您应该能够加载该类别。