/// <summary>
        /// 生成更新单个关系对象语句。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForRelationUpdate(GenerateContext context)
        {
            var data     = (RelationContent)context.Data;
            var metadata = data.Items.Navigate;
            var update   = new UpdateFragment(context, data.Table);

            update.AddSource(update.Target);
            if (data.IsAddRelation)
            {
                var source = data.CommitObject;
                foreach (var pair in metadata.Pairs)
                {
                    update.SetValue(pair.ForeignKey, source.GetMember(pair.PrincipalKey));
                }
            }
            else
            {
                var nullfargment = new SimpleFragment(context, "NULL");
                foreach (var pair in metadata.Pairs)
                {
                    update.SetValue(pair.ForeignKey, nullfargment);
                }
            }
            update.Where = update.Target.JoinCondition(data.CommitObject, data.Table.Keys);
            return(update);
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            Console.WriteLine($"\n*** typeof(AppCompatActivity) => {typeof(AppCompatActivity)}\n");

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);

            SetContentView(Resource.Layout.activity_main);

            var toolbar = FindViewById <Toolbar>(Resource.Id.toolbar);

            SetSupportActionBar(toolbar);

            var fab = FindViewById <FloatingActionButton>(Resource.Id.fab);

            fab.Click += FabOnClick;

            native = new Aarxerciser();

            fragment = native.CreateSimpleFragment(this);

            SupportFragmentManager.BeginTransaction()
            .Replace(Resource.Id.frame, fragment)
            .Commit();
        }
        /// <summary>
        /// 使用临时表形式,生成更新关系语句,
        /// 要求数据库拥有<see cref="EDbCapable.TemporaryTable"/>
        /// 和<see cref="EDbCapable.ModifyJoin"/>两个特性。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForRelationUpdateTempTable(GenerateContext context)
        {
            var data            = (RelationContent)context.Data;
            var metadata        = data.Items.Navigate;
            var block           = new BlockFragment(context);
            var createtemptable = new CreateTempTableFragment(context,
                                                              data.IsAddRelation ? data.Source.Keys.Concat(metadata.Pairs.Select(a => a.ForeignKey)) : data.Source.Keys);
            var insert = new InsertValueFragment(context, createtemptable.Table, data.CommitObject, data.Items);

            data.Source.Keys.ForEach(key => insert.SetValue(key));
            if (data.IsAddRelation)
            {
                metadata.Pairs.ForEach(
                    pair => insert.SetValue(pair.ForeignKey, data.CommitObject.GetMember(pair.PrincipalKey)));
            }
            var temptable = createtemptable.Table;
            var update    = new UpdateFragment(context, data.Table);

            update.AddSource(update.Target, temptable);
            if (data.IsAddRelation)
            {
                foreach (var pair in metadata.Pairs)
                {
                    update.SetValue(pair.ForeignKey, temptable.GetMember(pair.ForeignKey));
                }
            }
            else
            {
                var nullfargment = new SimpleFragment(context, "NULL");
                foreach (var pair in metadata.Pairs)
                {
                    update.SetValue(pair.ForeignKey, nullfargment);
                }
            }
            update.Target.Join(temptable, data.Table.Keys);
            return(new BlockFragment(context, createtemptable, insert, update));
        }