zoukankan      html  css  js  c++  java
  • Sterling学习

    1.启动和关闭引擎

            private void _ActivateEngine()
            {
                _engine = new SterlingEngine();
                _logger = new SterlingDefaultLogger(SterlingLogLevel.Verbose);
    
                _engine.Activate();
    
                Database = _engine.SterlingDatabase.RegisterDatabase<ItemsDatabaseInstance>(new IsolatedStorageDriver());
            }
    
            private void _DeactivateEngine()
            {
                Database.Flush();
                _logger.Detach();
                _engine.Dispose();
                Database = null;
                _engine = null;
            }

    2.加载/保存/删除:

       public static void Save(this ListItem listItem)
            {
                int currentIndex = (Application.Current as App).Database.Query<ListItem, int>().Count;
                if (listItem.Key == -1)
                {
                    listItem.Key = currentIndex;
                }
    
                (Application.Current as App).Database.Save(listItem);
                (App.Current as App).Database.Flush();
            }
    
            public static void Delete(this ListItem listItem)
            {
               // List<ListItem> list = (Application.Current as App).Database.Query<ListItem, int>();
                //(App.Current as App).Database.Delete(typeof(ListItem), listItem.Text);
               (App.Current as App).Database.Truncate(typeof(ListItem));
               
                (App.Current as App).Database.Flush();
            }
    
            public static IEnumerable<ListItem> Load(this IEnumerable<ListItem> listItem)
            {
    
                var list = (Application.Current as App).Database.Query<ListItem, int>();
                return new ObservableCollection<ListItem>(list.Select(item => item.LazyValue.Value).ToList());
            }
    
            public static int Count(this ListItem listItem)
            {
                int currentIndex = (Application.Current as App).Database.Query<ListItem, int>().Count;
    
                return currentIndex;
            }

    3.删除指定的文本和指定的ID,以文本为例

            public static void DeletebyText(string text)
            {
                var list = (Application.Current as App).Database.Query<ListItem, int>();
                ObservableCollection<ListItem> collection = new ObservableCollection<ListItem>(
                 list.Select(item => item.LazyValue.Value).ToList().Where(item => item.Text.Equals(text))
                    );
                foreach (var cll in collection)
                    (App.Current as App).Database.Delete(cll);
    
            }

    4.用于自动生成键的基础触发器

     public class IdentityTrigger<T> : BaseSterlingTrigger<T,int>  
      where T: class, IBaseModel, new()
    {
      private static int _idx = 1;
     
      public IdentityTrigger(ISterlingDatabaseInstance database)
      {
        // If a record exists, set it to the highest value plus 1
        if (database.Query<T,int>().Any())
        {
          _idx = database.Query<T, int>().Max(key => key.Key) + 1;
        }
      }
     
      public override bool BeforeSave(T instance)
      {
        if (instance.Id < 1)
        {
          instance.Id = _idx++;
        }
     
        return true;
      }
     
      public override void AfterSave(T instance)
      {
        return;
      }
     
      public override bool BeforeDelete(int key)
      {
        return true;
      }
    }

    5.自定义序列化程序

            public class TypeSerializer : BaseSerializer 
    {
      /// <summary>
      ///     Return true if this serializer can handle the object, 
      ///     that is, if it can be cast to type
        /// </summary>
      /// <param name="targetType">The target</param>
      /// <returns>True if it can be serialized</returns>
      public override bool CanSerialize(Type targetType)
      {
        return typeof (Type).IsAssignableFrom(targetType);
      }
     
      /// <summary>
      ///     Serialize the object
      /// </summary>
      /// <param name="target">The target</param>
      /// <param name="writer">The writer</param>
      public override void Serialize(object target, 
        BinaryWriter writer)
      {
        var type = target as Type;
        if (type == null)
        {
          throw new SterlingSerializerException(
            this, target.GetType());
        }
        writer.Write(type.AssemblyQualifiedName);
      }
     
      /// <summary>
      ///     Deserialize the object
      /// </summary>
      /// <param name="type">The type of the object</param>
      /// <param name="reader">A reader to deserialize from</param>
      /// <returns>The deserialized object</returns>
      public override object Deserialize(
        Type type, BinaryReader reader)
      {
        return Type.GetType(reader.ReadString());
      }
    }
  • 相关阅读:
    Python实现杨辉三角
    第8.30节 重写Python __setattr__方法实现属性修改捕获
    转:Cookie详解
    第8.29节 使用MethodType将Python __setattr__定义的实例方法与实例绑定
    第8.28节 Python中使用__setattr__定义实例变量和实例方法
    第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析
    第8.26节 重写Python类中的__getattribute__方法实现实例属性访问捕获
    关于open函数文件打开模式的有意思的一个现象
    第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用
    转:关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解
  • 原文地址:https://www.cnblogs.com/Yukang1989/p/2864233.html
Copyright © 2011-2022 走看看