/// <summary> /// 从节点所关联的信息节点集合中删除指定的信息节点 /// </summary> /// <param name="LabelNodePath"></param> /// <param name="infoNodeIDs"></param> public void DeleteInfoNodesOfLabelNodeDBContinuousExecution(String LabelNodePath, List <int> infoNodeIDs) { if (string.IsNullOrEmpty(LabelNodePath) || infoNodeIDs == null || infoNodeIDs.Count == 0) { return; } LabelNodeDB LabelNodeObj = _dbContext.LabelNodeDBs.FirstOrDefault(p => p.Path == LabelNodePath); if (LabelNodeObj == null) { return; } foreach (var infoNode in LabelNodeObj.InfoNodeDBs.ToList()) { if (infoNodeIDs.IndexOf(infoNode.ID) != -1) { //保证删除InfoNodeAndLabelNode记录 LabelNodeObj.InfoNodeDBs.Remove(infoNode); //确保InfoNodeDB删除 _dbContext.Entry(infoNode).State = EntityState.Deleted; } } //注意外部调用放记得多次使用后需调用:SaveChanges(); }
public int UpdateDataInfoObject(IDataInfo dataInfoObject) { LabelNodeDataInfo obj = dataInfoObject as LabelNodeDataInfo; if (String.IsNullOrEmpty(obj.Text) == false && obj.Text.Length > DALConfig.MaxTextFieldSize) { obj.Text = obj.Text.Substring(0, DALConfig.MaxTextFieldSize); } if (dataInfoObject == null || obj == null) { return(0); } bool isNew = false; LabelNodeDB dbobj = repository.GetLabelNodeDBWithoutInfoNodeDBsByPath(obj.Path); if (dbobj == null) { dbobj = new LabelNodeDB(); isNew = true; } dbobj.ModifyTime = obj.ModifyTime; dbobj.Label = obj.Text; dbobj.Path = obj.Path; // dbobj.RTFText = (String.IsNullOrEmpty(obj.RTFText)) ? null : Encoding.UTF8.GetBytes(obj.RTFText); if (isNew) { return(repository.AddLabelNodeDB(dbobj)); } else { return(repository.UpdateLabelNodeDB(dbobj)); } }
/// <summary> /// 更新节点的信息 /// </summary> /// <param name="LabelNodeObj"></param> public int UpdateLabelNodeDB(LabelNodeDB LabelNodeObj) { if (LabelNodeObj == null) { return(0); } //LabelNodeDB LabelNodeToModify = _dbContext.LabelNodeDBs.FirstOrDefault(p => p.ID == LabelNodeObj.ID); //if (LabelNodeToModify != null) //{ // LabelNodeToModify.ModifyTime = LabelNodeObj.ModifyTime; // LabelNodeToModify.Label = LabelNodeObj.Label; // return _dbContext.SaveChanges(); //} using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { LabelNodeDB LabelNodeToModify = context.LabelNodeDBs.FirstOrDefault(p => p.ID == LabelNodeObj.ID); if (LabelNodeToModify != null) { LabelNodeToModify.ModifyTime = LabelNodeObj.ModifyTime; LabelNodeToModify.Label = LabelNodeObj.Label; return(context.SaveChanges()); } } return(0); }
/// <summary> /// 按照Path提取相应节点所有的信息节点信息(是DBInfoNodeInfo对象)SqlCeException: 在 WHERE、HAVING、GROUP BY、ON 或 IN 子句中不能使用 ntext 和 image 数据类型,除非将这些数据类型与 LIKE 或 IS NULL 谓词一起使用。 /// </summary> /// <param name="path"></param> /// <returns></returns> public ObservableCollection <DBInfoNodeInfo> ContinuousQueriesDBInfoNodeInfosOfLabelNodeDB(String path) { if (String.IsNullOrEmpty(path)) { return(null); } ObservableCollection <DBInfoNodeInfo> infoNodeInfos = new ObservableCollection <DBInfoNodeInfo>(); //using (MyDBEntities context = new MyDBEntities(EFConnectionString)) //{ var query = from item in _dbContext.LabelNodeDBs where item.Path == path select item; LabelNodeDB LabelNodeObj = query.FirstOrDefault(); if (LabelNodeObj != null) { foreach (var info in LabelNodeObj.InfoNodeDBs) { infoNodeInfos.Add(new DBInfoNodeInfo() { ModifyTime = info.ModifyTime.Value, Path = info.Path, InfoNodeHearder = info.Text, ID = info.ID }); } } return(infoNodeInfos); //} }
/// <summary> /// 从节点所关联的信息节点集合中删除指定的信息节点 /// </summary> /// <param name="LabelNodePath"></param> /// <param name="infoNodeIDs"></param> public void DeleteInfoNodesOfLabelNodeDB(String LabelNodePath, List <int> infoNodeIDs) { if (string.IsNullOrEmpty(LabelNodePath) || infoNodeIDs == null || infoNodeIDs.Count == 0) { return; } using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { LabelNodeDB LabelNodeObj = context.LabelNodeDBs.FirstOrDefault(p => p.Path == LabelNodePath); if (LabelNodeObj == null) { return; } foreach (var infoNode in LabelNodeObj.InfoNodeDBs.ToList()) { if (infoNodeIDs.IndexOf(infoNode.ID) != -1) { //保证删除InfoNodeAndLabelNode记录 LabelNodeObj.InfoNodeDBs.Remove(infoNode); //确保InfoNodeDB删除 context.Entry(infoNode).State = EntityState.Deleted; } } context.SaveChanges(); } }
/// <summary> /// 按照标签ID从数据库中提取标签节点 /// 找不到返回null /// </summary> /// <param name="labelID"></param> /// <returns></returns> public LabelNodeDB getLabelNodeDB(int labelID) { using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { LabelNodeDB label = context.LabelNodeDBs.FirstOrDefault(f => f.ID == labelID); if (label != null) { return(label); } } return(null); }
/// <summary> /// 新建一个LabelNode记录,不包容任何关联节点 /// </summary> /// <param name="dataInfoObject"></param> /// <returns></returns> public int Create(IDataInfo dataInfoObject) { if (dataInfoObject == null || (dataInfoObject as LabelNodeDataInfo) == null) { return(0); } LabelNodeDB dbobj = LabelNodeHelper.changeToLabelNodeDB(dataInfoObject as LabelNodeDataInfo); int result = repository.AddLabelNodeDB(dbobj); //将数据库生成的ID值传回 dataInfoObject.ID = dbobj.ID; return(0); }
/// <summary> /// 向数据库中添加一条记录 /// </summary> /// <param name="LabelNodeObj"></param> /// <returns></returns> public int AddLabelNodeDB(LabelNodeDB LabelNodeObj) { if (LabelNodeObj == null) { return(0); } //_dbContext.LabelNodeDBs.Add(LabelNodeObj); //return _dbContext.SaveChanges() using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { context.LabelNodeDBs.Add(LabelNodeObj); return(context.SaveChanges()); } }
public IDataInfo GetDataInfoObjectByPath(string nodePath) { LabelNodeDB dbobj = repository.GetLabelNodeDBWithoutInfoNodeDBsByPath(nodePath); ObservableCollection <DBInfoNodeInfo> infos = repository.GetDBInfoNodeInfosOfLabelNodeDB(nodePath); LabelNodeDataInfo nodeInfo = LabelNodeHelper.changeToLabelNodeDataInfo(dbobj); if (nodeInfo != null) { nodeInfo.AttachInfoNodeInfos = infos; } return(nodeInfo); }
/// <summary> /// 转换为LabelNodeDataInfo,不理会附属文件集合 /// </summary> /// <param name="dbobj"></param> /// <returns></returns> public static LabelNodeDataInfo changeToLabelNodeDataInfo(LabelNodeDB dbobj) { if (dbobj == null) { return(null); } LabelNodeDataInfo obj = new LabelNodeDataInfo() { Text = String.IsNullOrEmpty(dbobj.Label) ? "" : dbobj.Label, // RTFText = dbobj.RTFText == null ? "" : Encoding.UTF8.GetString(dbobj.RTFText), Path = dbobj.Path, ModifyTime = dbobj.ModifyTime.Value, ID = dbobj.ID }; return(obj); }
/// <summary> /// 添加信息节点与标签的关联关系。 /// </summary> /// <param name="InfoNodePath"></param> /// <param name="labelNode"></param> public int AddLabelOfInfoNodeDB(String InfoNodePath, LabelNodeDB labelNode) { if (string.IsNullOrEmpty(InfoNodePath) || labelNode == null) { return(0); } using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { InfoNodeDB InfoNodeObj = context.InfoNodeDBs.FirstOrDefault(p => p.Path == InfoNodePath); if (InfoNodeObj == null) { return(0); } context.LabelNodeDBs.Add(labelNode);//添加到同一上下文关系 InfoNodeObj.LabelNodeDBs.Add(labelNode); return(context.SaveChanges()); } }
/// <summary> /// 将多个信息节点追加到信息节点中 /// 如果标签节点找不到,或者关联的信息节点为空集合,什么也不干,返回 /// </summary> /// <param name="LabelNodePath"></param> /// <param name="infoNodes"></param> public void AddInfoNodesOfLabelNode(String LabelNodePath, List <InfoNodeDB> infoNodes) { if (string.IsNullOrEmpty(LabelNodePath) || infoNodes == null || infoNodes.Count == 0) { return; } using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { LabelNodeDB LabelNodeObj = context.LabelNodeDBs.FirstOrDefault(p => p.Path == LabelNodePath); if (LabelNodeObj == null) { return; } foreach (var nodes in infoNodes) { LabelNodeObj.InfoNodeDBs.Add(nodes); } context.SaveChanges(); } }
/// <summary> /// 给信息节点添加标签关联,当用户在树中删除信息节点时,信息节点及其关联的“标签关联关系”会删除,但不会删除标签本身。在DataGrid中删除标签时,仅会删除信息节点中的标签关联关系。 /// </summary> private void AddLabelToInfoNode() { //var infoNodeDataObj = SelectedInfoNodeDataObj.DataItem as InfoNodeDataInfo; //var infoNodeAccessObj = SelectedInfoNodeDataObj.AccessObject as InfoNodeAccess; var labelNodeAccessObj = labeltree.SelectedItem.NodeData.AccessObject as LabelNodeAccess; var labelNodeDataObj = labeltree.SelectedItem.NodeData.DataItem as LabelNodeDataInfo; string selectedlabel = labeltree.SelectedItem.HeaderText; DBLabelInfo labelInfo = new DBLabelInfo() { ModifyTime = DateTime.Now, Path = labelNodeDataObj.Path, Label = selectedlabel }; if (InfoNodeDataInfoObj.AttachLabels.IndexOf(labelInfo) == -1) { LabelNodeDB labelNodeDB = labelNodeAccessObj.GetLabelNodeDBWithoutInfoNodeDBsByPath(labelNodeDataObj.Path); //根据选中的信息节点的路径将标签添加到数据库中信息节点关联的标签集合中,仅进行信息节点与标签之间的关联添加,并不创建标签。 InfoNodeAccessObj.AddLabelAssociation(InfoNodeDataInfoObj.Path, labelInfo, labelNodeDB); InfoNodeDataInfoObj.AttachLabels.Add(labelInfo); } }
/// <summary> /// 添加标签与信息节点的关联关系。 /// </summary> /// <param name="LabelNodeDBPath"></param> /// <param name="infoNode"></param> public int AddInfoNodeOfLabelNodeDB(String LabelNodeDBPath, InfoNodeDB infoNode) { if (string.IsNullOrEmpty(LabelNodeDBPath) || infoNode == null) { return(0); } using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { LabelNodeDB LabelNodeObj = context.LabelNodeDBs.FirstOrDefault(p => p.Path == LabelNodeDBPath); if (LabelNodeObj == null) { return(0); } //由于infoNode是之前从数据库中提取出来的实体数据,而不是新建的数据,所以,infoNode在EF中已经被标记有上下文, //通过引用赋值方式,并不能消除此上下文标记。此时如果需要在当前上下文中使用,必须先将它加入当前上下文中。 //这种方式添加的关联会复制一份数据,不推荐。 context.InfoNodeDBs.Add(infoNode); //以上。 LabelNodeObj.InfoNodeDBs.Add(infoNode); return(context.SaveChanges()); } }
/// <summary> /// 转换为LabelNode对象,不理会附属文件集合 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static LabelNodeDB changeToLabelNodeDB(LabelNodeDataInfo obj) { if (obj == null) { return(null); } //注意数据库中nvarchar最大允许4000个字符 if (obj.Text != null && obj.Text.Length > DALConfig.MaxTextFieldSize) { obj.Text = obj.Text.Substring(0, DALConfig.MaxTextFieldSize); } LabelNodeDB dbObj = new LabelNodeDB() { ModifyTime = obj.ModifyTime, Path = obj.Path, //RTFText = String.IsNullOrEmpty(obj.RTFText) ? null : Encoding.UTF8.GetBytes(obj.RTFText), Label = String.IsNullOrEmpty(obj.Text) ? "" : obj.Text, ID = obj.ID }; return(dbObj); }
/// <summary> /// 添加标签关联关系 /// </summary> /// <param name="labelInfo"></param> /// <param name="labeldb"></param> public void AddLabelAssociation(string nodePath, DBLabelInfo labelInfo, LabelNodeDB labeldb) { repository.AddLabelOfInfoNodeDB(nodePath, labeldb); //将ID传回,注意此ID与原labeldb是不一样的,所以添加关联实际会在数据库中新增一个内容一样但ID不一样的对象。 labelInfo.ID = labeldb.ID; }