尝试删除数据库中的记录并在之后使用LINQ重新创建它时,我收到错误:无法添加已存在的实体。 虽然记录已被删除。
我使用从方法中的LINQ查询获得的数据初始化Sales_header对象 SelectOrdersByOrderID(订单ID)
如果Salesheader的OrderID满足某个条件,我想删除数据库中的记录(Delete(Sales_header SalesHeader)),向对象添加其他值并在数据库中插入新记录(Insert(Sales_header SalesHeader) ))。
我不想更新记录,但删除它并重新创建它。
Sales_header SalesHeader = new Sales_header();
SalesHeader = SalesHeaderClass.SelectOrdersByOrderID(OrderID) as Sales_header;
if (SalesHeader.OrderID == *certain value*)
{
SalesHeaderClass.Delete(SalesHeader);
SalesHeader.Orderdate = DateTime.Today;
SalesHeader.Ordertime = DateTime.Now;
SalesHeaderClass.Insert(SalesHeader);
}
...
SalesHeaderClass中的方法,通过LINQ选择SalesHeader
public static object SelectOrdersByOrderID(int OrderID)
{
var Query = (from p in dc.Sales_headers
where p.OrderID.Equals(OrderID)
select p).SingleOrDefault();
return Query;
SalesHeaderClass中通过LINQ
插入SalesHeader的方法public static void Insert(Sales_header SalesHeader)
{
dc.Sales_headers.InsertOnSubmit(SalesHeader);
dc.SubmitChanges();
}
SalesHeaderClass中通过LINQ删除SalesHeader的方法
public static void Delete(Sales_header SalesHeader)
{
var DelOrder = (from p in dc.Sales_headers
where p.OrderID == SalesHeader.OrderID
select p).Single();
dc.Sales_headers.DeleteOnSubmit(DelOrder);
dc.SubmitChanges();
}
我需要做些什么才能插入记录? 创建具有相同值的新对象无济于事。
答案 0 :(得分:0)
除了更新不适合的问题之外。
首先需要两个上下文删除记录,然后插入记录。 EF将所有插入/更新/删除保留在内存中,直到您执行SubmitChanges(),因此您不能拥有两个具有相同ID的实体。
但是要将整个事务作为单个事务执行,您将需要TransactionScope。
using (var scope = new TransactionScope()) {
using (var salesHeader SalesHeader = new Sales_header()) {
// Delete record
...
salesHeader.SubmitChanges();
}
using (var salesHeader SalesHeader = new Sales_header()) {
// Insert record
...
salesHeader.SubmitChanges();
}
// Mark transaction complete
scope.Complete();
}
答案 1 :(得分:0)
要解决此问题,请使用不同的datacontext进行删除和插入操作。