2017-02-22 83 views
1

我有一個CMS系統,用戶可以在其中創建一個Category對象,然後用戶可以單擊創建的類別並將Product對象添加到該對象。當用戶瀏覽產品時,他們可以點擊一個Category,它將帶有Post請求的CategoryId發送到產品索引頁面。產品索引頁面然後獲取與傳遞的類別ID匹配的類別對象,選擇屬於該類別的產品列表屬性並顯示產品。 Category class有產品的List<Product>的財產。將產品分配給產品對象中帶有CategoryName的CategoryName

我現在有一個CSV data import form它允許用戶做同樣的事情,但只有一個CSV文件上傳。

CSV文件數據(灰色陰影)是產品清單。注 - 爲每個產品類別名稱列(5陰影列,即 「家」, 「健康&美」):

CSV_Data.png

這是產品和類別的類:

public class Product 
{ 
    public int Id { get; set; } 
    public string Barcode { get; set; } 
    [Required] 
    public string Name { get; set; } 
    public string Description { get; set; } 
    [Required] 
    public Byte[] Image { get; set; } 
    [Required] 
    public Decimal Price { get; set; } 
    [Required] 
    public bool ShowOnIndex { get; set; } 
} 

public class Category 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public Byte[] Image { get; set; } 
    public virtual ICollection<Product> Products { get; set; } 
} 

SQL Server中我與類別之間的關係是One-to-Many;一個類別有很多產品,一個產品只有一個類別。

在下面的代碼中,我試圖通過CategoryId將產品列表保存到正確的類別中。但是,我沒有CSV數據中每個產品的CategoryIds,因此我手動收集了循環中類別的所有ID。

public static async Task SaveProducts() 
{ 
    var CategoryIds = new List<int>(); 

    foreach (var item in CategoriesList) 
    { 
     db.Categories.Add(item); 
     var id = db.Categories.Where(c => c.Name == item.Name).Select(x => x.Id).ToString(); 
     CategoryIds.Add(int.Parse(id)); 
    } 

    foreach (var item in ProductsList) 
    { 
     foreach (var id in CategoryIds) 
     { 
      var category = await db.Categories.FindAsync(id); 
      category.Products.Add(item); 
     } 

    } 

    await db.SaveChangesAsync(); 
} 

我怎麼莫名其妙在Product對象CategoryName值匹配正確的Category Id

回答

0

我想,我可以添加每一個產品,他們屬於所有在一個循環中適當的類別,我做了這樣的:

public static async Task SaveProducts() 
     { 

      foreach (var category in CategoriesList) 
      { 
       foreach (var product in ProductsList) 
       { 

        if (product.CategoryName == category.Name) 
        { 
         category.Products.Add(product); 
        } 
       } 

       db.Categories.Add(category); 
      } 

      await db.SaveChangesAsync(); 
     } 

正如你看到的,唯一的實體我添加到數據庫中的是每次類別對象category。我不需要單獨添加產品,因爲我認爲Entity Framework知道類別和產品之間的一對多關係,所以當我添加一個類別時,實體框架將查看任何外鍵(這裏是類別列表中的列表)並且每次for循環迭代類別列表時,它都會將新的Product對象添加到數據庫中的Products實體表中,以用於類別列表中的每個產品對象。

相關問題