LINQ к SQL insert-if-non-existent

Вопреки большинству других ответов, которые я предлагаю против YUI Compressor; вы должны использовать Google Closure .

Не так много, потому что он сжимает больше, но в основном потому, что он будет улавливать ошибки JavaScript, такие как a = [1,2,3,];, которые заставляют IE сходить с ума.

11
задан Jon Galloway 21 September 2008 в 18:33
поделиться

3 ответа

public static void InsertIfNotExists<TEntity>
                    (this Table<TEntity> table,
                     TEntity entity,
                     Expression<Func<TEntity,bool>> predicate)
    where TEntity : class
{ 
    if (!table.Any(predicate)) 
    {
        table.InsertOnSubmit(record);
        table.Context.SubmitChanges();
    }
 }


table.InsertIfNotExists(entity, e=>e.BooleanProperty);
14
ответ дан 3 December 2019 в 02:03
поделиться

Согласитесь с ответом marxidad, но см. примечание 1.

Примечание 1: по моему скромному мнению, не мудро звонить db.SubmitChanges() во вспомогательном методе, потому что можно повредить транзакцию контекста. Это означает это, если Вы звоните InsertIfNotExists<TEntity> посреди сложного обновления нескольких объектов Вы сохраняете изменения не сразу, но на шагах.

Примечание 2: InsertIfNotExists<TEntity> метод является очень общим методом, который работает на любой сценарий. Если Вы хотите просто отличить объекты, которые загрузились от базы данных от объектов, которые были созданы из кода, можно использовать частичный метод OnLoaded из класса Объекта как это:

public partial class MyEntity
{
    public bool IsLoaded { get; private set; }
    partial void OnLoaded()
    {
        IsLoaded = true;
    }
}

Учитывая, что (и примечание 1), затем функциональность InsertIfNotExists уменьшается до следующего:

if (!record.IsLoaded)
    db.InsertOnSubmit(record);
5
ответ дан 3 December 2019 в 02:03
поделиться

Небольшая модификация Ответа Марка:

Если вы заботитесь о проверке, если объект существует на своем первичном ключ, ответ Marke можно использовать следующим образом:

public static void InsertIfNotExists<TEntity>
                    (this Table<TEntity> table
                     , TEntity entity
                    ) where TEntity : class
    {
        if (!table.Contains(entity))
        {
            table.InsertOnSubmit(entity);

        }
    }
4
ответ дан 3 December 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: