public EntityTypeMapping(IEntityType entityType) { Name = entityType.Name; TableName = entityType.GetTableName(); PrimaryKey = entityType.FindPrimaryKey() !.ToDebugString(MetadataDebugStringOptions.SingleLineDefault); Properties.AddRange( entityType.GetProperties() .Select(p => p.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); Indexes.AddRange( entityType.GetIndexes().Select(i => $"{i.Properties.Format()} {(i.IsUnique ? "Unique" : "")}")); FKs.AddRange( entityType.GetForeignKeys().Select(f => f.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); Navigations.AddRange( entityType.GetNavigations().Select(n => n.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); SkipNavigations.AddRange( entityType.GetSkipNavigations().Select(n => n.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); }
private static void Test() { var cmd = Util.Adapter; MEZUNBOL mezunbol = cmd.SelectSingle<MEZUNBOL>(); FK<MEZUNBOL> mezunFK = new FK<MEZUNBOL>(mezunbol, Util.Adapter); mezunFK.Join<SICIL>() .On(m => m.MEZUNBOLK, s => s.MEZUNBOLK) .LoadChilds(m => m.SICILs); PERSONELTIP personelTip = cmd.SelectSingle<PERSONELTIP>(); FK<PERSONELTIP> personekTipFK = new FK<PERSONELTIP>(personelTip, Util.Adapter); personekTipFK.Join<SICIL>().On(p => p.PERSONELTIPK, s => s.PERSONELTIPK).LoadChilds(p => p.SICILs); SICIL sicil = cmd.SelectSingle<SICIL>(); cmd.Upsert(sicil, new Expression<Func<SICIL, object>>[] { s => s.ADI, s => s.SOYADI }, null); FK<SICIL> sicilFK = new FK<SICIL>(sicil, cmd); Stopwatch bench = Stopwatch.StartNew(); sicilFK.Join<PERSONELTIP>().On(s => s.PERSONELTIPK, p => p.PERSONELTIPK).Set(s => s.PERSONELTIP) .Join<MEZUNBOL>().On(s => s.MEZUNBOLK, m => m.MEZUNBOLK).Set(s => s.MEZUNBOL); FK<PERSONELTIP> inner = new FK<PERSONELTIP>(sicil.PERSONELTIP, cmd); inner.Join<SICIL>().On(p => p.PERSONELTIPK, s => s.PERSONELTIPK).LoadChilds(p => p.SICILs); bench.Stop(); Console.WriteLine(bench.ElapsedMilliseconds); var sicilList = cmd.Select<SICIL>(); bench = Stopwatch.StartNew(); for (int j = 0; j < 100; ++j) { FKs<SICIL> fks = new FKs<SICIL>(sicilList, cmd) .Join<PERSONELTIP>() .On(s => s.PERSONELTIPK, p => p.PERSONELTIPK) .Set(s => s.PERSONELTIP) .Join<MEZUNBOL>() .On(s => s.MEZUNBOLK, m => m.MEZUNBOLK) .Set(s => s.MEZUNBOL); } bench.Stop(); Console.WriteLine(bench.ElapsedMilliseconds); // fk.Join(m => m.SICILs, s => s.MEZUNBOLK); //fk.Join(mezunbol, m => m.SICILs, s => s.MEZUNBOLK); }
/// <summary> /// M:N mappings in the database as M2NMapping objects /// </summary> /// <returns></returns> public List <M2NMapping> FindMappings() { List <M2NMapping> res = new List <M2NMapping>(); List <string> twoColTabs = TwoColumnTables(); List <List <FK> > twoColFKs = new List <List <FK> >(from table in twoColTabs where FKs.ContainsKey(table) select FKs[table]); foreach (List <FK> currTabFKs in twoColFKs) { if (currTabFKs.Count == 2) { // cannot say which table will use the mapping field (the one with more data) // ASK res.Add(new M2NMapping(currTabFKs[0].refTable, currTabFKs[0].refColumn, currTabFKs[1].refTable, currTabFKs[1].refColumn, currTabFKs[0].myTable, currTabFKs[0].refColumn, currTabFKs[0].myColumn, currTabFKs[1].myColumn)); res.Add(new M2NMapping(currTabFKs[1].refTable, currTabFKs[1].refColumn, currTabFKs[0].refTable, currTabFKs[0].refColumn, currTabFKs[1].myTable, currTabFKs[1].refColumn, currTabFKs[1].myColumn, currTabFKs[0].myColumn)); } } return(res); }
public virtual void ToUControl(UControl container, WC.GridViewCommandEventHandler handler, WC.GridViewPageEventHandler pagingHandler, WC.GridViewSortEventHandler sortingHandler, string navigateUrl = null) { // take care of all the dependant controls as well WC.GridView grid = new WC.GridView(); string[] DataKeyNames = PKColNames.ToArray(); if (CE.GlobalState == GlobalState.Administer) { // one of our datakeys may have been a FK and its value is now the representative field of the // foreign table, not our key, but in such cases the key will be stored in a prefixed column. for (int i = 0; i < DataKeyNames.Length; i++) { FK fk = FKs.Where(x => x.myColumn == DataKeyNames[i]).FirstOrDefault(); if (fk is FK) { DataKeyNames[i] = CC.TABLE_COLUMN_REAL_VALUE_PREFIX + DataKeyNames[i]; } } } grid.DataKeyNames = DataKeyNames; grid.AutoGenerateColumns = false; WC.TemplateField tf = new WC.TemplateField(); tf.HeaderTemplate = new SummaryGridCommandColumn(WC.ListItemType.Header); tf.FooterTemplate = new SummaryGridCommandColumn(WC.ListItemType.Footer); tf.ItemTemplate = new SummaryGridCommandColumn(WC.ListItemType.Item, actions); grid.Columns.Add(tf); foreach (string col in displayColumns) { WC.BoundField bf = new WC.BoundField(); bf.DataField = col; bf.HeaderText = col + " [-]"; bf.SortExpression = col; grid.Columns.Add(bf); } // must contain the whole PK even if it is not displayed - for the navigator // DataKeyNames are the real ones - including "_" prefixing foreach (string col in DataKeyNames) { if (displayColumns.Contains(col)) { continue; } WC.BoundField bf = new WC.BoundField(); bf.DataField = col; bf.Visible = false; grid.Columns.Add(bf); bf.HeaderText = col; } grid.AllowSorting = true; //PBPR container.Controls.Add(grid); grid.PagerStyle.CssClass = "navTablePaging"; grid.CssClass = "navTable"; grid.AllowPaging = true; grid.PageSize = 25; grid.PageIndexChanging += pagingHandler; grid.Sorting += sortingHandler; grid.DataSource = data.DefaultView; grid.DataBind(); //PBPR grid.RowCommand += handler; grid.ID = "Control" + controlId; }
/// <summary> /// finds the hierarchical relation within table only if valid for use in a NavTree /// </summary> /// <returns></returns> public List <FK> SelfRefFKs() { return(FKs.SelectMany(kv => from fk in kv.Value where fk.refTable == fk.myTable select fk).ToList <FK>()); }