首页 > 解决方案 > 如何在多对多模型中添加成分列表?

问题描述

我有供应商和成分的模型,他们可以看到对方。我有一份成分清单,我需要以某种方式将其添加给供应商。无法理解该怎么做。

    public void AddIngredientsToVendor(VendorIngredientsRegistrationModel model)
    {
        // Ingredients, that I want to add to wendor, Ids: [57, 59, 61, 62]
        List<Ingredient> ingredients = _repository.Fetch<Ingredient>(e => model.IngredientIds.Contains(e.Id),
                   e => e.Include(p => p.VendorIngredients)).ToList();

        var vendor = _repository.First<Vendor>(
            (e => e.Id == model.VendorId),
             e => e.Include(m => m.Ingredients));

        // How to add ingredients to Vendor?

        _repository.Update(vendor);
        _repository.SaveChanges();
    }

供应商成分.cs

public class VendorIngredient
{
    [ForeignKey(nameof(VendorId))]
    public Vendor Vendor { get; set; }
    public long VendorId { get; set; }

    [ForeignKey(nameof(IngredientId))]
    public Ingredient Ingredient { get; set; }
    public long IngredientId { get; set; }
}

供应商.cs

public class Vendor : BaseNetworkLinkedEntity
{
    public Vendor()
    {
        Ingredients = new List<VendorIngredient>();
    }

    [MaxLength(150)]
    public string VendorCompanyName { get; set; }
    public ICollection<VendorIngredient> Ingredients { get; set; }
}

标签: c#entity-frameworkasp.net-coremany-to-many

解决方案


假设 vendor 在AddIngredientsToVendor方法中的上下文中,如果您愿意将 vendor 上的集合类型更改为 just ,则应该像下面这样简单Ingreedient。供应商成分的概念在这里似乎失去了价值,因为它所做的只是将供应商名称附加到供应商集合中的每个成分

public void AddIngredientsToVendor(VendorIngredientsRegistrationModel model)
{
    // Ingredients, that I want to add to wendor, Ids: [57, 59, 61, 62]
    List<Ingredient> ingredients = _repository.Fetch<Ingredient>(e => model.IngredientIds.Contains(e.Id),
               e => e.Include(p => p.VendorIngredients)).ToList();

    vendor.Ingredients = ingredients;

    _repository.Update(vendor);
    _repository.SaveChanges();
}

如果您想保留它,VendorIngredient您需要编写一个同时接受成分和供应商的方法,然后将其映射到VendorIngredient


推荐阅读