C# 实体框架的简单更新
我有以下代码,无法保存更改。 我的方法的参数是一个字符串,其中包含我要在数据库中修改的产品的RefCode,然后查询将提取应该修改的BaseProduct。 (我试图简化代码并用英语进行设置,因此可能引入了一些语法错误,但在调试模式下的代码中,我从数据库中获取了所有信息)。Linq查询中的“select new”是否有问题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
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的对象,因此更新该对象不会影响数据库中的数据。