Как предотвратить вставку новых записей в таблицы при использовании Linq и SQL? - PullRequest
2 голосов
/ 14 октября 2008

При создании нового объекта, который сопоставлен с одной из моих таблиц SQL Server, LINQ вставляет новую запись в таблицу, когда я вызываю SubmitChanges. Я хочу предотвратить это, но мне все еще нужен мой новый объект.

Я знаю о пользовательских методах, но есть ли возможность отключить это поведение, чтобы оно просто обновляло существующие записи и никогда не вставляло новые записи, независимо от того, вызвал я MyTableClass myObject = new MyTableClass() или нет.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 14 октября 2008

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

Я бы предположил, что, возможно, сам факт появления этой проблемы указывает на то, что с подходом, который вы используете для ссылки на этот объект, что-то не так - что именно требует использования этого нового объекта?

2 голосов
/ 14 октября 2008

Если вы хотите, чтобы ваш контекст данных вставлялся в барф, вы можете сделать:

partial class DataClasses1DataContext
{
    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
    {
        if(GetChangeSet().Inserts.OfType<MyObject>().Any())
        {
            throw new InvalidOperationException("No inserts!");
        }
        base.SubmitChanges(failureMode);
    }
}

Хорошо?

[было: Не могли бы вы просто добавить его как «чистый» - то есть Attach (obj, false);

Если вам не нужен объект в модели, зачем добавлять его в контекст данных?]

0 голосов
/ 14 октября 2008

Не можете ли вы предотвратить это на стороне сервера? Подключитесь как роль, у которой нет доступа для вставки. Я подозреваю, что рано или поздно это будет самый пуленепробиваемый способ предотвращения вставок.

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