LINQ to SQL: установите PK, используя частичный метод DataContext «Вставить» - PullRequest
1 голос
/ 22 июня 2010

Я пытаюсь добиться чего-то похожего на то, что описано в этом старом посте SO , которое так и не получило правильного ответа. Я пытаюсь найти способ делегировать установку первичного ключа вновь вставленных объектов частичным методам DataContext InsertX (), когда вызывается метод SubmitChanges (). По сути, это делает генерацию первичного ключа ленивым и лучше отделяет его от бизнес-логики.

public class Foo
{
    public int Id
    {
        get ...
        set ... // usual linq to sql bodies
    }
}
...
// provide an implementation for the insert overload
public class DB : DataContext
{
    partial void InsertFoo(Foo instance)
    {
        instance.Id = GetNextFooId();
        ExecuteDynamicInsert(instance);
    }
}

В настоящее время происходит сбой при вставке более одного объекта с DuplicateKeyException, возможно, потому что LINQ to SQL пытается получить доступ к первичным ключам, чтобы отличить экземпляры друг от друга? Я попытался переопределить Equals и GetHashCode, чтобы решить эту проблему, но без кубиков.

Исключение не содержит подробных сведений о том, какой именно класс вызывает проблему, и нет способа зарегистрировать внутреннюю операцию DataContext, поэтому я буду признателен за любые предложения!

Если есть какое-то событие перед обновлением, которое запускается в какой-то момент, я мог бы подключиться к этому, но перегрузка DataContext Insert - единственный способ, которым я мог видеть. Возможно, LINQ to SQL просто не может выразить этот шаблон, поскольку для отражения PropertyChanging / PropertyChanged потребуется различие InsertingFoo / InsertedFoo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...