0

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

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();
            }
        }
    }
4

3 回答 3

2

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

您必须获取 de 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();
        }
    }
}
于 2013-04-05T07:27:20.203 回答
0

这不会那样工作。您应该使用以下CurrentValues.SetValues()方法:

contexte.Entry(BaseProduct).CurrentValues.SetValues(productToUpdate.BaseProduct);
于 2013-04-05T02:45:08.053 回答
0

我想你必须试试这个

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();
            }
        }
}
于 2013-04-05T04:42:34.200 回答