我有一个数据库表,我试图用money数据类型(十进制)更新一个单元格,并且我使用LINQ和Entity Framework。
不幸的是Context.SaveChanges();
由于某种原因无法工作。
这是表结构
Type Amount Machine
Cash 1000 Tablet
这是我的代码:
using (var GC = new GroundCommanderEntities())
{
PAYMENT_Repo PAYMENTREPO = new PAYMENT_Repo();
var ExistingCashPayment = GC.PAYMENT_Repo
.Where(Filter => Filter.Type == "Cash" && Filter.Machine == "Tablet").ToList();
string type = "";
var amt = 0.00m;
foreach (var item in ExistingCashPayment)
{
type = item.Type;
amt = item.Amount;
}
if (type == cbPaymentType.Text) //a combobox that contains Types
{
PAYMENTREPO.Amount = amt + Convert.ToDecimal(txtTendering.Text);
GC.SaveChanges();
return true;
}
else
{
return false;
}
}
答案 0 :(得分:2)
看起来GC就是你的DbContext。如果是这样,你需要添加对象的状态,修改如下......
db.Entry(obj).State = System.Data.Entity.EntityState.Modified; db.SaveChanges();
这应该有用。
答案 1 :(得分:1)
当您创建新实体时,必须先将添加到上下文中,然后再调用SaveChanges()
:
using (var GC = new GroundCommanderEntities())
{
PAYMENT_Repo PAYMENTREPO = new PAYMENT_Repo();
var ExistingCashPayment = GC.PAYMENT_Repo
.Where(Filter => Filter.Type == "Cash" && Filter.Machine == "Tablet").ToList();
string type = "";
var amt = 0.00m;
foreach (var item in ExistingCashPayment)
{
type = item.Type;
amt = item.Amount;
}
if (type == cbPaymentType.Text) //a combobox that contains Types
{
PAYMENTREPO.Amount = amt + Convert.ToDecimal(txtTendering.Text);
// add your NEW entity to the context!
// depending on which exact version of EF you're using, this
// might be called `.Add()` or `.AddObject()`
// Also, the name "PAYMENTREPOs" is just a guess - it might be
// different in your concrete case - adapt as needed!
GC.PAYMENTREPOs.Add(PAYMENTREPO);
GC.SaveChanges();
return true;
}
else
{
return false;
}
}
答案 2 :(得分:1)
这里有几个问题:
最重要的是,PAYMENTREPO
是一个新实例 - 它不是来自db上下文,因此更改它的值不起作用。您需要在保存更改之前添加它:
PAYMENTREPO.Amount = amt + Convert.ToDecimal(txtTendering.Text);
GC.PAYMENTREPOs.Add(PAYMENTREPO);
GC.SaveChanges();
其次,它不会导致完全无法更新,但会导致代码执行除您期望之外的其他操作:
foreach (var item in ExistingCashPayment)
{
type = item.Type;
amt = item.Amount;
}
此循环将type
和amt
设置为ExistingCashPayment列表中的最后一个值,而不是该列表内容的某种累积,这将是所需的行为所暗示的首先是那里的循环。