Насколько я знаю, нет, их нет. Если вы не хотите удалять это ... не звоните удалить! Тем не менее, некоторые другие варианты:
- вы можете сопоставить удаление с хранимой процедурой, которая просто устанавливает флаг в базе данных
- вы можете переопределить
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
).
Обновления вашего комментария; Честно говоря, я не думаю, что вы можете сделать это в этот момент ; Что касается «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);
}
}