Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包括产品中的实体类别_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

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()
是一种不必要的昂贵方式,只能获得您想要的一个类别。无论如何,您应该能够
加载该类别。