using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public static void Main()
var original = new Product {
IdentifierForProducts = new List<IdentifierForProduct>() {
new IdentifierForProduct {
var clone = MakeClone(original);
Console.WriteLine(clone.IdentifierForProducts.First().ProductId);
private static Product MakeClone(Product Original) {
Product Clone = new Product
ProductGroupId = Original.ProductGroupId,
ProductGroupSortOrder = Original.ProductGroupSortOrder + 1,
LongInfo = Original.LongInfo,
ProductTypeId = Original.ProductTypeId,
Weight = Original.Weight,
IdentifierForProducts = Original
.Select(i => CloneIdentifierForProduct(i))
foreach (var ifp in Clone.IdentifierForProducts) ifp.ProductId = Clone.Id;
private static IdentifierForProduct CloneIdentifierForProduct(IdentifierForProduct ifp) {
IdentifierForProduct IFP = new IdentifierForProduct
ProductId = ifp.ProductId,
ProductIdentifier = ifp.ProductIdentifier,
ProductIdentifierId = ifp.ProductIdentifierId,
public int Id { get; set; }
public int ProductGroupId { get; set; }
public int ProductGroupSortOrder { get; set; }
[Required, MaxLength(30), MinLength(4)] public string Title { get; set; }
[MaxLength(200)] public string Info { get; set; }
[MaxLength(4000)] public string LongInfo { get; set; }
[Required, DataType(DataType.Currency)] public decimal Price { get; set; }
public int Weight { get; set; }
public int ProductTypeId { get; set; }
public ICollection<PropertyOptionForProduct> ProductPropertyOptionForProducts { get; set; }
public ICollection<IdentifierForProduct> IdentifierForProducts { get; set; }
public ProductType Type { get; set; }
public ICollection<ProductInCategory> InCategories { get; set; }
public class ProductInCategory
public int Id { get; set; }
public int ProductId { get; set; }
public int ProductCategoryId { get; set; }
public int SortOrder { get; set; }
public Product Product { get; set; }
public ProductCategory ProductCategory { get; set; }
public class PropertyOptionForProduct
public int Id { get; set; }
public int ProductId { get; set; }
public int ProductPropertyId { get; set; }
public int ProductPropertyOptionId { get; set; }
public Product Product { get; set; }
public ProductPropertyOption ProductPropertyOption { get; set; }
public class IdentifierForProduct
public int Id { get; set; }
public int ProductId { get; set; }
public int ProductIdentifierId { get; set; }
[StringLength(30), MaxLength(30)]
public string Value { get; set; }
public ProductIdentifier ProductIdentifier { get; set; }
public Product Product { get; set; }
public enum ProductType {}
public enum ProductCategory {}
public enum ProductPropertyOption {}
public enum ProductIdentifier {}