Я новичок в области сущностей, а также в дженериках.
Вопрос 1:
У меня есть следующая общая функция для добавления или использования существующих объектов в БД:
public static T AddIfNotExists<T>(this DbSet<T> dbSet, T entity, Expression<Func<T, bool>> predicate = null) where T : class
{
T modul;
if (dbSet.Any())
{
modul = dbSet.FirstOrDefault(predicate);
if (modul == null)
{
modul = dbSet.Add(entity);
}
}
else
{
modul = dbSet.Add(entity);
}
return modul;
}
У меня есть код первой таблицы со свойством навигации по свойствам таблицы:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public virtual ResourceType ResourceType { get; set; }
[Required]
public virtual ICollection<Scan> ScanList { get; set; }
public virtual ICollection<ResourceObject> ParentResources { get; set; }
public virtual ICollection<Property> Properties { get; set; }
Теперь я хочу изменить общий метод для сравнения также обнуляемых свойств сущности, и я не совсем уверен, как справиться с этим. Я думаю, что мне нужен правильный предикат?
Вопрос 2:
Я также получил эту функцию из stackoverflow:
public static void AddRangeIfNotExists<TEnt, TKey>(this DbSet<TEnt> dbSet, IEnumerable<TEnt> entities, Func<TEnt, TKey> predicate) where TEnt : class
{
var entitiesExist = from ent in dbSet
where entities.Any(add => predicate(ent).Equals(predicate(add)))
select ent;
dbSet.AddRange(entities.Except(entitiesExist));
}
Может кто-нибудь подскажет, как использовать его в ответе на вопрос выше, потому что я сейчас работаю с коллекциями, может быть, добавить диапазон, работающий быстрее?
ти