实体框架的简单更新

本文关键字:更新 简单 框架 实体 | 更新日期: 2023-09-27 18:07:24

我有以下代码,我无法实现保存更改。我的方法的参数是一个字符串,其中包含我想要在数据库中修改的产品的RefCode,然后查询正在提取应该被修改的BaseProduct。(我试图简化代码并将其设置为英语,因此我可能引入了一些语法错误,但在调试模式下的代码中,我从DB获得所有信息)。Linq查询中的"select new"有问题吗?

public static void UpdateProduct(ViewProduct productToUpdate)
    {
        using (var context = new my_Entities())
        {
            var BaseProduct = (from prod in context.Product
                               where prod.Ref == productToUpdate.BaseProduct.RefPrd
                                      select new ViewBaseProduct
                                      {
                                          RefPrd = prod.Ref,
                                          DescrPrd = prod.DescrPrd,
                                          NormeCe = (bool)prod.NormeCE
                                      }).FirstOrDefault();
            if (BaseProduct != null)
            {
                //BaseProduct.NormeCe = false;
                BaseProduct = productToUpdate.BaseProduct;
                context.SaveChanges();
            }
        }
    }

实体框架的简单更新

但是BaseProduct是一个ViewBaseProduct对象,ViewBaseProduct是一个实体类吗?它似乎是一个ViewModel类。

您必须获取Product实体,修改其字段并保存更改。似乎你只应用更改ViewModel类。

试试这个:

public static void UpdateProduct(ViewProduct productToUpdate)
{
    using (var context = new my_Entities())
    {
        var BaseProduct = (from prod in context.Product
                           where prod.Ref == productToUpdate.BaseProduct.RefPrd)
                          .FirstOrDefault();
        if (BaseProduct != null)
        {
            //BaseProduct.NormeCe = false;
            BaseProduct.field1 = productToUpdate.BaseProduct.field1;
            BaseProduct.field2 = productToUpdate.BaseProduct.field2;
            //update the necesary fields
            //......
            context.SaveChanges();
        }
    }
}

这是行不通的。您应该使用CurrentValues.SetValues()方法:

contexte.Entry(BaseProduct).CurrentValues.SetValues(productToUpdate.BaseProduct);

我想你应该试试这个

public static void UpdateProduct(ViewProduct productToUpdate)
    {
        using (var contexte = new my_Entities())
        {
            var BaseProduct = (from prod in contexte.Product
                               where prod.Ref == productToUpdate.BaseProduct.RefPrd
                                      select new ViewBaseProduct
                                      {
                                          RefPrd = prod.Ref,
                                          DescrPrd = prod.DescrPrd,
                                          NormeCe = (bool)prod.NormeCE
                                      }).FirstOrDefault();
            if (BaseProduct != null)
            {
                BaseProduct.BaseProduct.RefPrd=productToUpdate.BaseProduct.RefPrd
                BaseProduct.BaseProduct.DescrPrd=productToUpdate.BaseProduct.DescrPrd
                BaseProduct.BaseProduct.NormeCE==(bool)productToUpdate.BaseProduct.NormeCE
                contexte.SaveChanges();
            }
        }
}