据我所知,不,他们不是。如果你不想删除它...不要叫删除!然而,一些其他的选项:
- 之前还是可以映射删除到存储过程,只是设置标志在数据库
- 您可以覆盖
SubmitChanges
和修复行动的任何变化(通过GetChangetSet
)呼吁base.SubmitChanges
- 但是,我很怀疑这是否是一个好主意;例如,它可能需要重新插入物品。
代码:
partial class MyDataContext {
public override void SubmitChanges(ConflictMode failureMode) {
var delta = GetChangeSet();
foreach(var record in delta.Deletes.OfType<Customer>()) {
Customers.InsertOnSubmit(record);
record.IsDeleted = true;
}
base.SubmitChanges(failureMode);
}
}
显然,如果它需要更加灵活,你可能要使用GetTable()
(而不是刚性Customers
属性)。
更新re your comment;我真的不认为你可以做到这一点在这一点;关于“10个地方”的事情......国际海事组织(IMO)应该隐藏存储库接口背后的数据上下文,因此所有10个地方都会调用像CreateUser
这样的方法来处理数据上下文和必要的逻辑(可能带有分开的业务逻辑类来处理一些规则)。此外,由于并发问题,通常应该在数据库级别处理唯一性(通过约束)。
但要做到你想要什么想救他们面前:
partial class MyDataContext {
public override void SubmitChanges(ConflictMode failureMode) {
var delta = GetChangeSet();
foreach(var record in delta.Inserts.OfType<User>()) {
if(Users.Any(x=>x.Name == record.Name) {...throw an exception...}
}
base.SubmitChanges(failureMode);
}
}
我会重新您的评论更新(你看到的编辑,顺便说一句?) – 2009-06-15 10:03:04