Я думаю, что ваша проблема в том, что ваш foreach l oop оценивает запрос в течение l oop, когда вы пытаетесь вызвать Savechanges (), которая хочет сгенерировать другую транзакцию.
Если вы просто измените запросы SizeList и Product на .ToList () в конце, это вызовет оценку, и тогда вы будете использовать списки в foreach, а не транзакционный запрос.
Обновлен, чтобы отразить комментарии:
Глядя на ваш код, вы видите, что ProductSku является свойством Product. Возможно, вам следует подумать о том, чтобы сделать SKU отдельной таблицей, чтобы вам не нужно было повторять все стандартные свойства продукта. Однако, чтобы дать то, о чем я думаю, вы просите, вам нужно что-то вроде этого:
static void Main(string[] args)
{
using (PetersContext db = new PetersContext()) {
var sizeList = from ProductSizes in db.Sizes
where ProductSizes.SizeScale == 1//product.SizeScale.SizeScaleId
select (ProductSizes.SizeDesc);
var products = from Product in db.Products
select Product;
foreach (var size in sizeList)
{
foreach (var product in products)
{
Product newProduct = new Product()
{
ProductSkus = (product.ProductCode + product.ProductBrand.ToString() + product.ProductColour.ToString() + size.ToString()),
ProductBrand = product.ProductBrand,
ProductCode = product.ProductCode,
CostPrice = product.CostPrice,
SellPrice = product.SellPrice,
ProductDescription = produce.ProductDescription,
ProductSeason = product.ProductSeason,
ProductType = product.ProductType
};
Console.WriteLine(p1.ProductSkus);
db.Products.Add(newProduct);
}
}
db.SaveChanges();
Console.ReadLine();
}
}