private static TColumn CreateColumn <TColumnGroup, TColumn>(Mounter <TColumnGroup, TColumn> mounter, Action <TColumn> initializer) where TColumnGroup : Projection where TColumn : Column, new() { var result = Column.Create <TColumn>(mounter.OriginalDeclaringType, mounter.OriginalName); var parent = mounter.Parent; result.Construct(parent.ParentModel, mounter.DeclaringType, parent.GetColumnName(mounter), ColumnKind.ProjectionMember, null, initializer); parent.Add(result); return(result); }
private static TChildModel CreateChildModel <TModel, TChildModel>(Mounter <TModel, TChildModel> mounter, Func <TChildModel, T> relationshipGetter, Func <TModel, TChildModel> constructor) where TModel : Model <T> where TChildModel : Model, new() { var parentModel = mounter.Parent; TChildModel result = constructor(parentModel); var parentRelationship = relationshipGetter(result).UnsafeJoin(parentModel.PrimaryKey); var parentMappings = AppendColumnMappings(parentRelationship, null, result, parentModel); result.Construct(parentModel, mounter.DeclaringType, mounter.Name, parentRelationship, parentMappings); return(result); }
protected static void Register <T, TColumn>(Expression <Func <T, TColumn> > getter, Mounter <TColumn> fromMounter) where T : Projection where TColumn : Column, new() { RegisterColumn(getter, fromMounter); }
protected static void Register <TModel, TColumn>(Expression <Func <TModel, TColumn> > getter, Mounter <TColumn> fromMounter) where TModel : Model where TColumn : Column, new() { RegisterColumn(getter, fromMounter); }
protected static void Register <T, TColumn>(Expression <Func <T, TColumn> > getter, Mounter <TColumn> fromMounter) where T : Projection where TColumn : Column, new() { var initializer = getter.Verify(nameof(getter)); fromMounter.VerifyNotNull(nameof(fromMounter)); var result = s_columnManager.Register(getter, mounter => CreateColumn(mounter, initializer)); result.OriginalDeclaringType = fromMounter.OriginalDeclaringType; result.OriginalName = fromMounter.OriginalName; }
private string GetColumnName <T>(Mounter <T> mounter) { return(IsLocal ? mounter.Name : Name + "." + mounter.Name); }
/// <summary>Adds a new column to this adhoc model, from existing column property.</summary> /// <typeparam name="T">The type of the column.</typeparam> /// <param name="mounter">The existing column mounter.</param> /// <param name="inheritColumnKey">A value indicates whether the newly added column should inherit <see cref="ColumnId"/> from the existing column property.</param> /// <param name="initializer">The additional column initializer.</param> /// <returns>The new column added.</returns> public T AddColumn <T>(Mounter <T> mounter, bool inheritColumnKey = false, Action <T> initializer = null) where T : Column, new() { return(ColumnList.Add(mounter, inheritColumnKey, initializer)); }