ユーザーはCategory
オブジェクトを作成できるCMSシステムを使用しています。作成したカテゴリをクリックしてProduct
オブジェクトを追加できます。ユーザーが製品をブラウズしているときにカテゴリをクリックすると、PostIdentを持つCategoryIdが製品インデックスページに送信されます。商品インデックスページでは、渡されたカテゴリIDに一致するカテゴリオブジェクトが取得され、そのカテゴリに属する商品リストプロパティが選択され、商品が表示されます。 Category class
は、製品のList<Product>
という特性を持っています。Productオブジェクトで外部キーとして与えられたCategoryNameのカテゴリに製品を割り当てる
私はCSV data import form
を持っています。ユーザーは同じことをすることができますが、1つのCSVファイルをアップロードすることができます。
CSVファイルのデータ(網掛けの灰色)は、製品のリストです。注 - 各製品のカテゴリ名欄(第五影付きの列、すなわち "ホーム"、 "ヒース&美"):
これは、製品とカテゴリのクラスです:
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
です。カテゴリには多くの製品があり、製品には1つのカテゴリしかありません。
次のコードでは、カテゴリリストで正しいカテゴリに製品のリストを保存しようとしています。しかし、私はCSVデータ内の各製品のCategoryIdsを持っていなかったので、ループ内のカテゴリのすべてのIDを手動で収集しています。私は何とか正しいCategory Id
にProduct
オブジェクトでCategoryName
値と一致するにはどうすればよい
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();
}
。