/// <summary>
        /// 判断是否不需要加载。
        /// </summary>
        /// <param name="identifier"></param>
        /// <returns></returns>
        protected bool CheckWithoutLoading(IInstanceIdentifier identifier)
        {
            if (identifier is EntityContextOptions options && options.LoadBehavior == LoadBehavior.None)
            {
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 尝试将 <see cref="IInstanceIdentifier"/> 实例添加到管理器,并返回一个实例名。如果管理器中已有该实例,则返回原有的实例名。
        /// </summary>
        /// <param name="identification"></param>
        /// <returns></returns>
        public static string TryAdd(IInstanceIdentifier identification)
        {
            lock (_instances)
            {
                var item = _instances.FirstOrDefault(s => s.Value.Equals(identification));
                if (!string.IsNullOrEmpty(item.Key))
                {
                    return(item.Key);
                }

                var key = RandomGenerator.Create();
                _instances.TryAdd(key, identification);

                return(key);
            }
        }
        public IEnumerable <MInstance> ResolveInstances(KPsystem kp, IInstanceIdentifier identifier)
        {
            List <MInstance> instances = new List <MInstance>();

            if (identifier is InstanceIdentifier)
            {
                InstanceIdentifier ident = identifier as InstanceIdentifier;
                if (ident.Indicator == InstanceIndicator.TYPE)
                {
                    foreach (MType type in kp.Types)
                    {
                        if (type.Name == ident.Value)
                        {
                            instances.AddRange(type.Instances);
                        }
                    }
                }
            }
            //solve if instance identifier is complex (i.e. includes more than one basic identifier)

            return(instances);
        }
Beispiel #4
0
 private void writeInstanceIdentifier(IInstanceIdentifier instanceIdentifier)
 {
     owt.Write("{");
     if (instanceIdentifier is InstanceIdentifier)
     {
         InstanceIdentifier iid = instanceIdentifier as InstanceIdentifier;
         owt.Write("\"indicator\":");
         writeInstanceIndicator(iid.Indicator);
         owt.Write(", \"value\":\"" + iid.Value + "\"");
     }
     else if (instanceIdentifier is CompoundInstanceIdentifier)
     {
         CompoundInstanceIdentifier ciid = instanceIdentifier as CompoundInstanceIdentifier;
         owt.Write("\"lhs\":");
         writeInstanceIdentifier(ciid.Lhs);
         owt.Write(",\"op\":");
         writeIIOperator(ciid.Operator);
         owt.Write("\"rhs\":");
         writeInstanceIdentifier(ciid.Rhs);
     }
     owt.Write("}");
 }
Beispiel #5
0
 public static LinkRule LinkDestroy(Multiset ms, IInstanceIdentifier tar)
 {
     return(new LinkRule(RuleType.LINK_DESTRUCTION, ms, tar));
 }
Beispiel #6
0
 public static LinkRule LinkCreate(Multiset ms, IInstanceIdentifier tar)
 {
     return(new LinkRule(RuleType.LINK_CREATION, ms, tar));
 }
Beispiel #7
0
 private LinkRule(RuleType t, Multiset ms, IInstanceIdentifier tar)
     : base(ms)
 {
     type   = t;
     Target = tar;
 }
 public CompoundInstanceIdentifier(IIOperator op, IInstanceIdentifier lhs, IInstanceIdentifier rhs)
 {
     Operator = op;
     Lhs      = lhs;
     Rhs      = rhs;
 }
 public TargetedMultiset(IInstanceIdentifier identifier)
 {
     multiset = new Multiset();
     target   = identifier;
 }
Beispiel #10
0
 /// <summary>
 /// 尝试从 <see cref="IInstanceIdentifier"/> 实例中获取 <see cref="IProviderService"/> 实例。
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="identification"></param>
 /// <returns></returns>
 public static T GetProviderService <T>(this IInstanceIdentifier identification) where T : class, IProviderService
 {
     return(identification.ServiceProvider.TryGetService(() => identification.Provider.GetService <T>()));
 }
 /// <summary>
 /// 初始化 <see cref="ContextServiceContext"/> 类的新实例。
 /// </summary>
 /// <param name="identifier"></param>
 public ContextServiceContext(IInstanceIdentifier identifier)
 {
     ServiceProvider = identifier.ServiceProvider;
     ContextType     = identifier.ContextType;
     Options         = (EntityContextOptions)identifier;
 }