当前位置: 首页>>代码示例>>C#>>正文


C# IDomainObjectDTORepository.TryGetOwner方法代码示例

本文整理汇总了C#中IDomainObjectDTORepository.TryGetOwner方法的典型用法代码示例。如果您正苦于以下问题:C# IDomainObjectDTORepository.TryGetOwner方法的具体用法?C# IDomainObjectDTORepository.TryGetOwner怎么用?C# IDomainObjectDTORepository.TryGetOwner使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IDomainObjectDTORepository的用法示例。


在下文中一共展示了IDomainObjectDTORepository.TryGetOwner方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RemoveZombies

		private static void RemoveZombies(
			IDomainObjectDTORepository dtoRepos,
			IList<DomainObjectDTO> allDtos)
		{
			var count = allDtos.Count;
			var legalOwnerlessClasses = new HashSet<string>
				{
					// Start at 7.0
					"LangProject", // Started as no owner allowed.
					"ScrRefSystem", // Started as no owner allowed.
					"CmPossibilityList", // Started as required owner. // Optionally unowed 7000010. Required owner re-added and removed again by 7000020.
					"CmPicture", // Started as no owner allowed. Optionally unowed by 7000019
					//"UserView", // Started as no owner allowed. Removed in 7000031
					//"LgWritingSystem", // Started as no owner allowed. Removed in 7000019
					"WfiWordform", // none 7000001
					"PunctuationForm", // Added to model in 7000010. Added 'none' between 7000010 and 7000011
					"LexEntry", // 7000028
					// Initial release: 7.0.6 at DM 7000037

					//"VirtualOrdering", // 7000040 (added class in 7000038. Added 'none' with no model change number between 39 and 40).
					// Release 7.1.1 at DM 7000044
					// Release 7.2.x at DM 7000051 (51 added in 7.2 branch.)
					// Release 7.3.x at DM 70000xx
				};
			if (dtoRepos.CurrentModelVersion >= 7000040)
				legalOwnerlessClasses.Add("VirtualOrdering");
			if (dtoRepos.CurrentModelVersion >= 7000059)
				legalOwnerlessClasses.Add("Text");


			var goners = new List<DomainObjectDTO>(count);
			// Key is guid of owner. Value is set of guids it owns.
			// In one very large project that ran out of memory, it had 1281871 dtos, and
			// 115694 of them owned more than one other dto.  So we'll guess that 1/10th
			// of the total count is a reasonable estimate for the capacity of ownerMap.
			var ownerMap = new Dictionary<DomainObjectDTO, HashSet<string>>(count/10);
			foreach (var currentDto in allDtos)
			{
				DomainObjectDTO owningDto;
				if (dtoRepos.TryGetOwner(currentDto.Guid, out owningDto))
				{
					if (owningDto == null)
					{
						if (dtoRepos.CurrentModelVersion >= 7000060 && !legalOwnerlessClasses.Contains(currentDto.Classname))
							goners.Add(currentDto); // Not allowed to be unowned, so zap it.
						continue;
					}

					// Has owner, but does owner know that it owns it?
					HashSet<string> ownees;
					if (!ownerMap.TryGetValue(owningDto, out ownees))
					{
						ownees = GetOwnees(owningDto.XmlBytes);
						// Cache it only if it's really useful to do so.
						if (ownees.Count > 2)
							ownerMap[owningDto] = ownees;
					}
					if (ownees.Contains(currentDto.Guid.ToLowerInvariant()))
						continue;
					// Current dto  is a zombie, so remove it, and everything it owns.
					goners.Add(currentDto);
				}
				else
				{
					// Current dto  is a zombie, so remove it, and everything it owns.
					goners.Add(currentDto);
				}
			}
			ownerMap.Clear();
			foreach (var goner in goners)
			{
				RemoveIncludingOwnedObjects(dtoRepos, goner, false);
			}
		}
开发者ID:bbriggs,项目名称:FieldWorks,代码行数:74,代码来源:DataMigrationServices.cs

示例2: ValidateStyleReference

		private void ValidateStyleReference(IDomainObjectDTORepository repoDTO, XElement xeStyle, string sRefName)
		{
			XElement xeOnly = null;
			XElement xeObjsur = null;
			foreach (XElement xeRef in xeStyle.Descendants(sRefName))
			{
				Assert.IsNull(xeOnly, sRefName + " should appear only once in an StStyle object");
				xeOnly = xeRef;
				foreach (XElement xeLink in xeRef.Descendants("objsur"))
				{
					Assert.IsNull(xeObjsur, "objsur should appear only once in a " + sRefName + " field");
					xeObjsur = xeLink;
					XAttribute xa = xeObjsur.Attribute("guid");
					Assert.IsNotNull(xa, sRefName + "/objsur must have a guid attribute");
					DomainObjectDTO dto;
					Assert.IsTrue(repoDTO.TryGetValue(xa.Value, out dto), sRefName + " must point to a valid object");
					Assert.AreEqual("StStyle", dto.Classname, sRefName + " must point to a style");
					DomainObjectDTO dtoOwner;
					Assert.IsTrue(repoDTO.TryGetOwner(xa.Value, out dtoOwner), sRefName + " must point to a style with a valid owner");
					Assert.AreEqual("LangProject", dtoOwner.Classname, sRefName + " must point to a style owned by LangProject");
				}
				Assert.IsNotNull(xeObjsur, "objsur should appear once in a " + sRefName + " field");
			}
		}
开发者ID:bbriggs,项目名称:FieldWorks,代码行数:24,代码来源:DataMigration7000018Tests.cs

示例3: ChangeInvalidGuid

		private void ChangeInvalidGuid(IDomainObjectDTORepository repoDto, LexTypeInfo info,
			string name, string guidStd)
		{
			var xaGuid = info.XmlElement.Attribute("guid");
			if (xaGuid == null)
				throw new Exception("The object does not have a guid -- this is impossible!");
			xaGuid.SetValue(guidStd);
			var guidBad = info.DTO.Guid;
			if (!m_mapBadGoodGuids.ContainsKey(guidBad))
				m_mapBadGoodGuids.Add(guidBad, guidStd);
			var className = info.DTO.Classname;
			repoDto.Remove(info.DTO);
			info.DTO = new DomainObjectDTO(guidStd, className, info.XmlElement.ToString());
			repoDto.Add(info.DTO);
			// Fix the owning reference (but only if it's one of the two lists, because otherwise
			// it might be contained in a LexTypeInfo that hasn't yet been processed).
			var bad = String.Format("guid=\"{0}\"", guidBad);
			var good = String.Format("guid=\"{0}\"", guidStd);
			var bad2 = String.Format("guid='{0}'", guidBad);	// probably pure paranoia...
			var good2 = String.Format("guid='{0}'", guidStd);
			DomainObjectDTO dtoOwner;
			if (repoDto.TryGetOwner(info.DTO.Guid, out dtoOwner) && dtoOwner.Classname == "CmPossibilityList")
			{
				dtoOwner.Xml = dtoOwner.Xml.Replace(bad, good).Replace(bad2, good2);
				repoDto.Update(dtoOwner);
			}
			// Fix any references from LexEntryRef objects.
			foreach (var dtoRef in repoDto.AllInstancesWithSubclasses("LexEntryRef"))
			{
				var xml = dtoRef.Xml;
				if (xml.Contains(guidBad))
				{
					dtoRef.Xml = xml.Replace(bad, good).Replace(bad2, good2);
					repoDto.Update(dtoRef);
				}
			}
			m_mapNameGuid.Remove(name);
			m_mapGuidName.Remove(guidStd);
		}
开发者ID:bbriggs,项目名称:FieldWorks,代码行数:39,代码来源:DataMigration7000042.cs

示例4: FixOwnershipOfSubtypes

		private void FixOwnershipOfSubtypes(IDomainObjectDTORepository repoDto)
		{
			var types = repoDto.AllInstancesWithSubclasses("LexEntryType");
			var cFixedFirst = 0;
			foreach (var dto in types)
			{
				var xml = dto.Xml;
				var fFixed = false;
				foreach (var badGuid in m_mapBadGoodGuids.Keys)
				{
					if (xml.Contains(badGuid))
					{
						var bad = String.Format("guid=\"{0}\"", badGuid);
						var good = String.Format("guid=\"{0}\"", m_mapBadGoodGuids[badGuid]);
						xml = xml.Replace(bad, good);
						var bad2 = String.Format("guid='{0}'", badGuid);
						var good2 = String.Format("guid='{0}'", m_mapBadGoodGuids[badGuid]);
						xml = xml.Replace(bad2, good2);	// probably pure paranoia...
						fFixed = true;
					}
				}
				if (fFixed)
				{
					dto.Xml = xml;
					repoDto.Update(dto);
					++cFixedFirst;
				}
				var cFixed = 0;
				foreach (var dtoSub in repoDto.GetDirectlyOwnedDTOs(dto.Guid))
				{
					DomainObjectDTO dtoOwner;
					if (!repoDto.TryGetOwner(dtoSub.Guid, out dtoOwner) || dtoOwner != dto)
					{
						// we have a broken ownership link -- fix it!
						var xeSub = XElement.Parse(dtoSub.Xml);
						var xaOwner = xeSub.Attribute("ownerguid");
						if (xaOwner == null)
							xeSub.Add(new XAttribute("ownerguid", dto.Guid));
						else
							xaOwner.Value = dto.Guid;
						dtoSub.Xml = xeSub.ToString();
						repoDto.Update(dtoSub);
						++cFixed;
					}
				}
			}
		}
开发者ID:bbriggs,项目名称:FieldWorks,代码行数:47,代码来源:DataMigration7000042.cs

示例5: VerifyEntryTypeOwners

		/// <summary>
		/// Verify that every LexEntryType points back to a valid owner after migration, and that
		/// the owner points to the LexEntryType.
		/// </summary>
		/// <param name="repoDto"></param>
		private static void VerifyEntryTypeOwners(IDomainObjectDTORepository repoDto)
		{
			foreach (var dto in repoDto.AllInstancesWithSubclasses("LexEntryType"))
			{
				DomainObjectDTO dtoOwner;
				Assert.IsTrue(repoDto.TryGetOwner(dto.Guid, out dtoOwner), "All entry types should have valid owners!");
				DomainObjectDTO dtoOwnedOk = null;
				foreach (var dtoT in repoDto.GetDirectlyOwnedDTOs(dtoOwner.Guid))
				{
					if (dtoT == dto)
					{
						dtoOwnedOk = dtoT;
						break;
					}
				}
				Assert.AreEqual(dto, dtoOwnedOk, "The owner should own the entry type!");
			}
		}
开发者ID:bbriggs,项目名称:FieldWorks,代码行数:23,代码来源:DataMigration7000042Tests.cs


注:本文中的IDomainObjectDTORepository.TryGetOwner方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。