public void Create_AttrValuesFields_ForWork(Work _work, WorkTypeEnum type) { ChangeTracker.DetectChanges(); int typeID = (int)type; var oldAttrIds = _work.AttrValues.Select(a => a.AttrID).ToList(); List <int> attrIDs = (from a in WorkTypeAttrs where a.WorkTypeID == typeID select a.AttrID).ToList(); attrIDs.RemoveAll(a => oldAttrIds.Contains(a)); //Удаляем те атрибуты, что была, добавлять будем только новые List <AttrValue> vals = new List <AttrValue>(); foreach (var a in attrIDs) { AttrValue value = new AttrValue(); value.WorkID = _work.ID; value.AttrID = a; // todo почему здесь не заполняется поле DataType ? vals.Add(value); } AttrValues.AddRange(vals); try { SaveChanges(); } catch (Exception e) { throw e; } }
public void Update_AttrValues_ForWork(List <AttrValue> values) { foreach (var v in values) { ChangeTracker.DetectChanges(); AttrValues.AddOrUpdate(v); SaveChanges(); } }
public void Delete_AttrValuesFields_ForWork(int WorkID) { // todo довольно странный способ удаления объектов, но в EF реально грустно // здесь есть некоторый ускоритель, в некоторых случаях он реально может спасти https://habr.com/post/203214/ IEnumerable <AttrValue> toDeleteDB = (from a in AttrValues where a.WorkID == WorkID select a).ToList(); AttrValues.RemoveRange(toDeleteDB); }
public AttrValue GetAttributeValue(string attributeName) { if (string.IsNullOrEmpty(attributeName)) { throw new ArgumentNullException(nameof(attributeName)); } var result = AttrValues.FirstOrDefault(av => av.Attr.Name == attributeName); return(result); }
public List <AttrValue> Read_AttrValues_ForWork(Work work) { return(AttrValues.Include(a => a.Attribute).Where(a => a.WorkID == work.ID).ToList()); // todo, не нашёл где используется этот метод }