Вопреки большинству других ответов, которые я предлагаю против YUI Compressor; вы должны использовать Google Closure .
Не так много, потому что он сжимает больше, но в основном потому, что он будет улавливать ошибки JavaScript, такие как a = [1,2,3,];
, которые заставляют IE сходить с ума.
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);
Согласитесь с ответом 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);
Небольшая модификация Ответа Марка:
Если вы заботитесь о проверке, если объект существует на своем первичном ключ, ответ Marke можно использовать следующим образом:
public static void InsertIfNotExists<TEntity>
(this Table<TEntity> table
, TEntity entity
) where TEntity : class
{
if (!table.Contains(entity))
{
table.InsertOnSubmit(entity);
}
}