- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用 LINQ2SQL 从数据库中删除一个实体,而不必预先获取它(出于性能原因)。
我理解这可以按如下方式完成(Delete a LINQ to SQL record without loading it first):
public void Delete(int id)
{
var e = new TestEntity { Id = id };
_context.TestEntities.Attach(e, false);
_context.TestEntities.DeleteOnSubmit(e);
}
然而,当 TestEntity 包含类似于以下内容的日期时间时:
public class TestEntity
{
public int Id { get; set; }
public String TestString { get; set; }
public DateTime TestDate { get; set; }
public int TestInt { get; set; }
}
我收到以下错误:
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
这基本上意味着它试图根据 SQL 日期时间验证 .net 默认日期时间
有没有办法在不需要预取的情况下删除具有不可空值的实体?
*注意我还尝试将日期时间值设置为虚拟值,在这种情况下我得到以下信息:
Row not found or changed.
最佳答案
“未找到或更改行”表明您已将这些列设置为进行验证。如果您有时间戳 (rowversion
) 列,您可以使用该单一值进行乐观并发检查,当然,您仍然不知道该值。在某些情况下,您可以完全 禁用并发检查(在 dbml 中所有有趣的列上设置 UpdateCheck="Never"
)。
但是,也许更简单的选择是:
_context.ExecuteCommand("delete from [TableName] where [PrimaryKey]={0}", id);
或类似的东西。不面向对象,但非常有效。请注意,这不会在与 SubmitChanges
相同的事务中运行,除非您自己管理事务,并且它不会验证是否恰好删除了 1 行。但它是直接的。另请注意,数据上下文不会知道此更改,因此如果您的数据上下文也有(比如说)该行的待处理更新,它可能会感到困惑。
关于c# - 在 Linq2SQL 中不先加载就删除实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766960/
我是一名优秀的程序员,十分优秀!