我正在尝试删除超过1天创建的项目,但我的所有项目仍然存在。我确信更改已提交到我的数据库,因为我在其他位置也使用RemoveItem
方法。
using (var db = new CommerceEntities())
{
DateTime checkexpiryDate = DateTime.UtcNow.AddDays(-1);
var itemstoDelete = from c in db.ShoppingCarts
where c.DateCreated < checkexpiryDate
select new
{
c.CartID,
c.ProductID,
c.Color,
c.Size,
};
foreach (var item in itemstoDelete)
{
try
{
//remove item code....
//RemoveItem(string cartID, int productID, string color, string size)
}
public void RemoveItem(string cartID, int productID, string color, string size)
{
using (var db = new CommerceEntities())
{
....
..
//db.DeleteObject(myItem);
....
..
//db.SaveChanges();
...
....
..
}
}
答案 0 :(得分:3)
IMO,首选的方法是TSQL,而不是ORM
declare @when datetime = GETUTCDATE() - 1
delete from ShoppingCarts where DateCreated < @when
通过ADO.NET或任何帮助程序实用程序执行都很简单。
避免通过网络拖动未知数量的数据,并避免在执行多个谨慎操作时进行冗长的事务。
答案 1 :(得分:0)
实体框架对吗?
db.DeleteObject(item);
db.SaveChanges();
http://msdn.microsoft.com/en-us/library/bb386870.aspx
您需要选择一个实际元素,并不清楚您要删除的内容。
答案 2 :(得分:0)
有些明显的问题,但可能是您的问题:您确定数据库中的日期是UTC格式吗?
您可能想尝试的其他事情是在“try”语句中共享代码(我假设某些事情实际发生在那里而您刚刚将其删除)并且还使用SQL事件探查器来查看正在执行的内容在SQL Server上,包括原始select语句和后续deletations。