public void MakePersistent()
 {
     ThrowErrorIfNotTransient();
     previous = new EntityOid(metamodel, TypeName, Key)
     {
         IsTransient = IsTransient
     };
     IsTransient = false;
     CacheState();
 }
 public void MakePersistentAndUpdateKey(object[] newKey)
 {
     ThrowErrorIfNotTransient(newKey);
     previous = new EntityOid(metamodel, TypeName, Key)
     {
         IsTransient = IsTransient
     };
     Key         = newKey; // after old key is saved !
     IsTransient = false;
     CacheState();
 }
        public EntityOid(IMetamodelManager metamodel, string[] strings)
        {
            Assert.AssertNotNull(metamodel);
            this.metamodel = metamodel;
            var helper = new StringDecoderHelper(metamodel, strings);

            TypeName    = helper.GetNextString();
            Key         = helper.GetNextObjectArray();
            IsTransient = helper.GetNextBool();
            EntityKey   = (EntityKey)helper.GetNextSerializable();

            if (helper.HasNext)
            {
                bool hasPrevious = helper.GetNextBool();
                if (hasPrevious)
                {
                    previous = (EntityOid)helper.GetNextEncodedToStrings();
                }
            }
            CacheState();
        }