添加新条目实体框架多对多关系映射



我有以下模型: 这有多对多的关系。

public class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[Required]
public string Code { get; set; }
[MaxLength(1000)]
public string Description { get; set; }
public string ImageUrl { get; set; }
[Required]
public double Price { get; set; }        
public decimal Cost { get; set; }
public bool IsActive { get; set; }
public ICollection<ProductCategory> ProductCategories { get; set; }
}
public class ProductCategory
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[Required]
public string Code { get; set; }
[MaxLength(1000)]
public string Description { get; set; }
public string CategoryImgeUrl { get; set; }

public ICollection<Product> Products { get; set; }
}

我想使用现有类别添加新产品,但是当我添加新产品时,我也会在不使用现有类别的情况下创建新类别。

public void Add(ProductViewModel vm)
{
try
{
if (vm.SelectedCategoryIds.Count() != 0)
{
var catList = new List<ProductCategoryViewModel>();
foreach (var item in vm.SelectedCategoryIds) {
var cat = Context.ProductCategories.Where(c=>c.Id == item).FirstOrDefault();
catList.Add(Mapper.Map<ProductCategoryViewModel>(cat));
}
vm.ProductCategories = catList;
}
var model = Mapper.Map<Product>(vm);
model.CreatedDate = DateTime.Now;
model.IsDeleted = false;
Context.Products.Add(model);
Context.SaveChanges();
}
catch (Exception ex)
{
}
}

在这里,我想添加具有现有类别的新产品。 我该如何整理这件事?

可能是

public void Add(ProductViewModel vm)
{
try {
var model = Mapper.Map<Product>(vm);
model.ProductCategories = new List<ProductCategory>();
//but this should be done by the Product ctor
if (vm.SelectedCategoryIds.Count() != 0) {
//var catList = new List<ProductCategoryViewModel>();
foreach (var item in vm.SelectedCategoryIds) {
var cat = Context.ProductCategories.Where(c=>c.Id == item).FirstOrDefault();
if ( cat != null )
model.ProductCategories.Add(cat);
//catList.Add(Mapper.Map<ProductCategoryViewModel>(cat));
}
//vm.ProductCategories = catList;
}
//var model = Mapper.Map<Product>(vm);
model.CreatedDate = DateTime.Now;
model.IsDeleted = false;
Context.Products.Add(model);
Context.SaveChanges();
}
catch (Exception ex)
{
}
}

请不要将 foreach my 替换为单个查询

foreach (var item in Context.ProductCategories.
Where(c=> vm.SelectedCategoryIds.Contains(c.Id))) 
{
model.ProductCategories.Add(item);
}

当然,正如格特·阿诺德(Gert Arnold(所建议的那样,有许多变体,例如使用Attach....

根据您的实体创建产品和产品类别类具有多对多关系。在产品类别中尝试此操作并检查

试试这个:

public class ProductCategory
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[Required]
public string Code { get; set; }
[MaxLength(1000)]
public string Description { get; set; }
public string CategoryImgeUrl { get; set; }

public Product Product { get; set; }
}

最新更新