Example #1
0
 public DBTableAdapterBase(IResolverProvider resolverProvider, ICommandBuilder <T> commandBuilder, DBConnectionWrapper currentConnection, DBTransactionWrapper currentTrans)
     : base(resolverProvider, currentConnection, currentTrans)
 {
     CommandBuilder = commandBuilder;
     InsertCommand  = commandBuilder.CreateInsertCommand(this);
     UpdateCommand  = commandBuilder.CreateUpdateCommand(this);
     DeleteCommand  = commandBuilder.CreateDeleteCommand(this);
     LoadCommand    = commandBuilder.CreateLoadCommand(this);
 }
Example #2
0
        public virtual int Update(ref T obj, DBConnectionWrapper conn, DBTransactionWrapper trans = null, params Expression <Func <T, object> >[] targetProperties)
        {
            if (UpdateCommand == null)
            {
                throw new NotSupportedException("Update is not support for this [" + typeof(T).FullName + "], make sure you have primary key defined in Entity Metadata for this type.");
            }

            IDBTableAdapterCommand <T> cmd = UpdateCommand;

            if (targetProperties.Length > 0)
            {
                cmd = CreateUpdateCommand(targetProperties);
            }
            return(cmd.Execute(ref obj, conn, trans));
        }
Example #3
0
        private IDBTableAdapterCommand <T> CreateUpdateCommand(Expression <Func <T, object> >[] targetProperties)
        {
            IEnumerable <PropertyInfo> targetProps = targetProperties.Select(
                i =>
            {
                Expression expr = i.Body;
                if (expr.NodeType == ExpressionType.Convert)
                {
                    expr = ((UnaryExpression)expr).Operand;
                }
                if (expr.NodeType != ExpressionType.MemberAccess)
                {
                    throw new ArgumentException("Only MemberExpression can be parsed!");
                }
                var prop = ((MemberExpression)expr).Member as PropertyInfo;
                if (prop == null)
                {
                    throw new ArgumentException("[" + ((MemberExpression)expr).Member.Name + "] is not a Property of " + typeof(T).FullName);
                }
                if (PkColumnsInfo.FirstOrDefault(j => j.ObjectProperty == prop) != null)
                {
                    throw new ArgumentException("Cannot update the primary key column [" + ((MemberExpression)expr).Member.Name + "]");
                }
                return(prop);
            }
                );
            var setCols = SetColumnsInfo.Where(i => targetProps.Contains(i.ObjectProperty)).ToList();

            if (setCols.Count() == 0)
            {
                throw new ArgumentException("No column will be updated!");
            }

            var updateContext = new DBTableAdapterContext <T>(this.Mapping, this.ResolverProvider, AllColumnsInfo, PkColumnsInfo, InsertColumnsInfo, setCols);
            IDBTableAdapterCommand <T> cmd = CommandBuilder.CreateUpdateCommand(updateContext);

            return(cmd);
        }