Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架的简单更新_C#_Asp.net Mvc_Linq_Entity Framework - Fatal编程技术网

C# 实体框架的简单更新

C# 实体框架的简单更新,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,我有以下代码,无法保存更改。 我的方法的参数是一个字符串,其中包含我要在数据库中修改的产品的RefCode,然后查询将提取应该修改的BaseProduct。 (我试图简化代码并用英语进行设置,因此可能引入了一些语法错误,但在调试模式下的代码中,我从数据库中获取了所有信息)。Linq查询中的“select new”是否有问题 public static void UpdateProduct(ViewProduct productToUpdate) { using (var

我有以下代码,无法保存更改。 我的方法的参数是一个字符串,其中包含我要在数据库中修改的产品的RefCode,然后查询将提取应该修改的BaseProduct。 (我试图简化代码并用英语进行设置,因此可能引入了一些语法错误,但在调试模式下的代码中,我从数据库中获取了所有信息)。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();
            }
        }
    }

这样不行。您应该使用
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();
            }
        }
}

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

您必须获取反产品实体,修改其字段并保存更改。似乎您只将更改应用于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();
        }
    }
}

没错,ViewBaseProduct是一个ViewModel类。我会试试你的建议现在看来很明显……就是这样:)谢谢卡洛斯!当我在Linq查询中执行“select new ViewBaseProduct”时,我正在创建一个未“链接”到Enity的对象,因此更新该对象不会影响数据库中的数据。