我有以下代码,实际上非常简单:
foreach (var pr in b.Receipes)
{
var br = prod.Where(o => o.ProductID == pr.ProductID).FirstOrDefault();
string entity = "piece";
if (pr.SelectedEntity != null)
entity = pr.SelectedEntity.Type;
if (br != null)
{
br.TotalQuantity = br.TotalQuantity - b.Amount * pr.QuantityUsage;
br.Amount = (Int32)(br.TotalQuantity / br.UnitQuantity);
}
dc.SRAddInvoiceDetailsConsumable(inv.InvoiceID, pr.ProductID, entity, pr.QuantityUsage, b.Amount);
dc.SubmitChanges();
}
所以我执行这个存储过程,它在带有for循环的表中插入记录,在第二个循环中,我得到错误行未找到或更改。
表结构如下:
[Id] INT IDENTITY NOT NULL PRIMARY KEY,
[InvoiceID] INT NOT NULL,
[ProductID] INT NOT NULL,
[Entity] NVARCHAR(300) NULL,
[QuantityUsage] float NOT NULL,
[Amount] int NOT NULL
存储过程:
CREATE PROCEDURE [dbo].[SRAddInvoiceDetailsConsumable]
@InvoiceID INT,
@ProductID INT,
@Entity NVARCHAR(300),
@QuantityUsage float,
@Amount INT
AS
BEGIN
INSERT INTO SRInvoiceDetailsConsumables
(InvoiceID, ProductID, Entity, QuantityUsage, Amount)
VALUES
(@InvoiceID, @ProductID, @Entity, @QuantityUsage, @Amount)
END
在之前发布的错误帖子之后,对我没有用的东西。
1. dbml结构与表格完全相同。
2.我用服务器表替换dbml以重新生成dbml。
3.在表的dbml属性中,我将属性“Update check”设置为never。
我将实际值传递给存储过程,但没有无效值。
我的想法已经用完,任何帮助都会很棒!
BIG EDIT:
我找到了一个有效的解决方案。
if (br != null)
{
br.TotalQuantity = br.TotalQuantity - b.Amount * pr.QuantityUsage;
br.Amount = (Int32)(br.TotalQuantity / br.UnitQuantity);
dc.Refresh(System.Data.Linq.RefreshMode.KeepChanges, br);
}
问题不在我最初想的存储过程中。