需要帮助来创建新父亲,并有效地重新分配孩子

时间:2019-03-25 13:57:49

标签: c# entity-framework asp.net-core entity

我从CSV文件创建一个模块,并带有一个默认的Submodule,每个Submodule都包含段(CSV中的每一行),现在我需要将这些段拆分成许多子模块。当我创建项目时,我创建了1个默认子模块,并将所有段作为其子级。 现在输入代码:

public Modules splitModule(int id, string type, int amount){
        var ModuleSplit = _context.Modules.Include(x=>x.SourceLang).Where(x=>x.Id == id).FirstOrDefault();
        var DefaultSubM = _context.Submodules.Include(x=>x.Segments).Where(x=>x.ModuleId == ModuleSplit.Id).FirstOrDefault();
        List<Submodules> listToAdd = new List<Submodules>();
        if(type == "linguists"){
            //linguists = rows / linguists , rounded 
            var rowAmount = DefaultSubM.Segments.Count();
            int chunkSize =  rowAmount / amount ;

            for(int i=0 ; i< amount-1 ; i++){
                Submodules newSub = new Submodules();
                newSub.Status = Abr.Active;
                newSub.Token = Guid.NewGuid().ToString();
                listToAdd.Add(newSub);
            }

            _context.Submodules.AddRange(listToAdd);
            _context.SaveChanges();

            var skipAm = rowAmount;
            if(rowAmount % amount != 0){
                skipAm++;
            }

            foreach(var a in listToAdd){
                var subL = DefaultSubM.Segments.Take(rowAmount).Skip(skipAm);
                foreach(var b in subL){
                    a.Segments.Add(b);
                    DefaultSubM.Segments.Remove(b);
                }
            }
            _context.SaveChanges();
        }

我需要将ChuckSize的段数从默认子模块中提取到每个新的子模块中。有正确的方法吗? ,据我所知(一点),我需要先将它们添加到上下文中,然后保存以获取ID。然后从默认值中除第一个ChunkSize之外的所有值都添加到第二个中,然后递归地对每个重复。 感觉到很多代码,并且为此感到混乱。也许我缺少使用linq或方法的神奇方法。

编辑:提出了这个解决方案,但感觉比原来应该的要肮脏和复杂...

EDIT2:在我需要使用Child.Parent = newParent对象的地方阅读。

0 个答案:

没有答案