Переопределите метод SaveChanges в вашем контексте:
public override int SaveChanges()
{
DateTime saveTime = DateTime.UtcNow;
foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == (EntityState) System.Data.EntityState.Added))
{
if (entry.Property("CreatedDate").CurrentValue == null)
entry.Property("CreatedDate").CurrentValue = saveTime;
}
return base.SaveChanges();
}
Обновлено из-за комментариев : только для только что добавленных сущностей будет установлена дата.
Похоже, вы можете использовать тот же самый Array.prototype.slice.call, который превращает объект, подобный массиву args, в массив. ( См. Здесь )
var inputs = document.getElementsByTagName('input');
var selects = document.getElementsByTagName('select');
inputs = Array.prototype.slice.call(inputs);
selects = Array.prototype.slice.call(selects);
var res = inputs.concat(selects);
alert(res.length);
Вы не можете присоединиться к ним, но вы все еще можно последовательно просматривать их в одном цикле, например так:
for ( var i = 0; i < inputs.length + selects.length; i++ ) {
var element = ( i < inputs.length ) ? inputs[i] : selects[i-inputs.length];
}
В качестве альтернативы, используя jQuery, вы можете выбрать их все за один раз:
$('input, select')
Насколько мне известно, тип NodeList
является неизменяемым (см. эту статью , например), что означает, что вам придется сгенерировать свой собственный объект.
Простым методом было бы просто создать массив и скопировать все элементы в этот массив.
var inputs = documentElement.getElementsByTagName('input');
var selects = document.getElementsByTagName('select');
var all = new Array(inputs.length + selects.length);
var index = 0;
for (i = 0; i < inputs.length; i++)
all[index++] = inputs[i];
for (i = 0; i < selects.length; i++)
all[index++] = selects[i];
Переменная all
затем содержит объединение двух наборов узлов.
Во-первых, я подумал, что можно объединить массивы с помощью Array.prototype, например:
Array.prototype.concat.call(selects, inputs);
Но это не работает, поэтому я сделал массивы из коллекций узлов и объедините его. Выглядит это так:
(function () {
var inputs = document.getElementsByTagName('input'),
selects = document.getElementsByTagName('select'),
result,
i,
node;
function convert (collection) {
var a = [];
for (var i = 0, length = collection.length; i < length; i++) {
a.push(collection[i]);
}
return a;
}
// concatenation && convertation
result = Array.prototype.concat(convert(inputs), convert(selects));
// traversing
i = result.length;
while(node = result[--i]) {
alert(node.getAttribute('name'));
}
})();