实体框架的简单更新
本文关键字:更新 简单 框架 实体 | 更新日期: 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();
}
}
}