EF Core & ASP.NET Core MVC 添加新数据而不是更新

EF Core & ASP.NET Core MVC add new data instead update

我正在尝试更新一些内容,而我的代码只是添加新行而不是更新数据。我已经在 startup.cs 中使用 addscoped。 (以前的回答都是关于这个的。) 我正在使用存储库模式。 对于我之前的回答;当然,我有数据库和我需要的所有部件。我正在做插入,删除没有问题。

这是我的实体:

public class Product : IEntity
{
    public int Id { get; set; }
    [Required(ErrorMessage ="Name can not be empty.")]
    [MinLength(3,ErrorMessage ="Lenght must be at least 3 characters.")]
    public string Name { get; set; }
    [DataType(DataType.Currency)]
    public double Price { get; set; }
    public double? Discount { get; set; }
    public string Description { get; set; }
    public DateTime? CreatedTime { get; set; }
    public DateTime? ModifiedDate { get; set; }
    [DisplayName("Image URL")]
    public string ImageUrl { get; set; }

    public bool IsActive { get; set; } = true;

    public Team Team { get; set; }
    public int? TeamId { get; set; }

    public Category Category { get; set; }
    public int CategoryId { get; set; }
}

这是我的回购协议。更新:

public async Task<int> Update(Product entity)
{
       
    entity.ModifiedDate = DateTime.Now;           
    dbContext.Update(entity);
    return await dbContext.SaveChangesAsync();
}

这是控制器:视图的 DD 方法。在下拉菜单中显示 category/team 个名称而不是他们的 ID。

[HttpPost]
public async Task<IActionResult> Edit(ProductUpdateRequest productToUpdate)
{

    if (ModelState.IsValid)
    {
            
        int affectedRows= await productService.UpdateProduct(productToUpdate);

        if (affectedRows>0)
        {
            TempData["RowAlert"] = "Edit successfully performed.";
        }
           
        return View();

    }
    TempData["RowAlert"] = "Your entries are not acceptable. Check your properties.";
    List<SelectListItem> selectedCategories = new List<SelectListItem>();
    selectedCategories = await getCategoriesforDD();

    List<SelectListItem> selectedTeams = new List<SelectListItem>();
    selectedTeams = await getTeamsforDD();

    ViewBag.Categories = selectedCategories;
    ViewBag.Teams = selectedTeams;

    return View();
}

根据您之前的评论,这应该有效:

public async Task<int> Add(Product entity)
{
    context.Entry(entity).State = EntityState.Added;
    return await dbContext.SaveChangesAsync();
}

更多信息在这里:https://docs.microsoft.com/en-us/ef/ef6/saving/change-tracking/entity-state

我通过向我的 DTO 添加 ID 解决了这个问题。 (实体的主键。)

public class ProductUpdateRequest
{
    public int Id { get; set; }
    [Required(ErrorMessage = "Ürün adı boş bırakılamaz.")]
    public string Name { get; set; }
    [DataType(DataType.Currency)]
    public double Price { get; set; }
    public double? Discount { get; set; }
    public bool IsActive { get; set; }
    public string ImageUrl { get; set; }
    public string Description { get; set; }     
    public int? TeamId { get; set; }     
    public int CategoryId { get; set; }
}