示例#1
0
        private static DbRelationOperateBase AddRelation <TSource, TTarget>(this DbSet <TSource> dataSet, TSource source, LambdaExpression expression, TTarget target)
            where TSource : class
            where TTarget : class
        {
            var propertyInfo = expression.GetMember();
            var configure    = dataSet.Context.Configuration;
            var table        = configure.Metadata.Table(typeof(TSource));
            var navigate     = table.Navigates[propertyInfo];
            DbObjectsOperateBase dependentInsert  = null;
            DbObjectsOperateBase dependentInsert2 = null;
            var executor = dataSet.Context.Executor;

            if (!navigate.IsComposite)
            {
                DbObjectsOperateBase currentInsert = null;
                if (navigate.IsForeign == true)
                {
                    currentInsert   = GetInsertOperate <TSource>(source, executor);
                    dependentInsert = GetInsertOperate <TTarget>(target, executor);
                }
                else
                {
                    currentInsert   = GetInsertOperate <TTarget>(target, executor);
                    dependentInsert = GetInsertOperate <TSource>(source, executor);
                }
                if (currentInsert != null)
                {
                    var reference = (IInsertReferenceRelation)currentInsert;
                    var relation  = reference.Relations.FirstOrDefault(a => a.Navigate == navigate);
                    if (relation == null)
                    {
                        relation = new DbAddRelationOperate <TSource>(dataSet.Context, propertyInfo, typeof(TSource), table, navigate);
                        reference.Relations.Add(relation);
                    }
                    relation.Add(source, target);
                    if (dependentInsert != null)
                    {
                        currentInsert.Dependents.Add(dependentInsert);
                    }
                    return(relation);
                }
            }
            else
            {
                dependentInsert  = GetInsertOperate <TSource>(source, executor);
                dependentInsert2 = GetInsertOperate <TTarget>(target, executor);
            }
            var result = GetOrCreate(dataSet, propertyInfo, new DbRelationItem(source, target)
                                     , (context, property) => new DbAddRelationOperate <TSource>(context, propertyInfo, typeof(TSource), table, navigate));

            if (dependentInsert != null)
            {
                result.Dependents.Add(dependentInsert);
            }
            if (dependentInsert2 != null)
            {
                result.Dependents.Add(dependentInsert2);
            }
            return(result);
        }
示例#2
0
 /// <summary>
 /// 创建数据对象。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="operate">当前操作对象。</param>
 internal GenerateDataForCommit(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
     if (operate is IConcurrencyCheckOperate concur)
     {
         NeedConcurrencyCheck = concur.NeedCheck;
     }
     Table        = context.Metadata.Table(operate.ClrType);
     TableCount   = Table.InheritSets.Length + 1;
     Items        = operate;
     Loader       = CreateLoader(context, Table);
     CommitObject = new CommitObjectFragment(context, Loader);
 }
示例#3
0
 /// <summary>
 /// 创建提交内容对象。
 /// </summary>
 /// <param name="context"></param>
 /// <param name="operate"></param>
 internal ContentBase(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
     if (operate is IConcurrencyCheckOperate concur)
     {
         NeedConcurrencyCheck = concur.NeedCheck;
     }
     Table        = context.Metadata.Table(operate.ClrType);
     Items        = operate;
     Items        = operate;
     Loader       = CreateLoader(context, Table);
     CommitObject = new CommitObjectFragment(context, Loader);
 }
示例#4
0
 /// <summary>
 /// 创建提交单元。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="operate">操作对象。</param>
 internal InheritContentUnitBase(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
 }
示例#5
0
 /// <summary>
 /// 创建内容对象。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="operate">操作对象。</param>
 internal UpdateContent(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
 }
示例#6
0
 /// <summary>
 /// 创建数据对象。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="operate">当前操作对象。</param>
 internal GenerateDataForUpdate(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
 }
示例#7
0
 /// <summary>
 /// 创建内容对象。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="operate">操作对象。</param>
 internal InheritDeleteContent(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
     Array.Reverse(Tables);
 }
示例#8
0
 /// <summary>
 /// 创建内容对象。
 /// </summary>
 /// <param name="context">生成上下文。</param>
 /// <param name="operate">操作对象。</param>
 internal InheritInsertContent(GenerateContext context, DbObjectsOperateBase operate)
     : base(context, operate)
 {
 }