public static object GetExt(this Base_Article article, Base_CatalogExt catExt) { if (catExt == null) { return(null); } var artExt = article.Exts.FirstOrDefault(ext => ext.CatlogExtId == catExt.Id); if (artExt == null) { return(null); } switch ((ExtDataType)catExt.DataType) { case ExtDataType.Currency: return(CommOp.ToDecimalNull(artExt.Value)); case ExtDataType.DateAndTime: case ExtDataType.Date: return(CommOp.ToDateTimeNull(artExt.Value)); case ExtDataType.SingleNumber: return(CommOp.ToIntNull(artExt.Value)); case ExtDataType.Bool: return(CommOp.ToBool(artExt.Value)); default: return(artExt.Value); } }
bool ChangeExts(Base_Catalog catalog, Type catType) { bool changed = false; //反射找到对象所有扩展属性, 这里忽略了对象的父属性,避免在Base_CatalogExt重复定义 var extProps = catType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Where(p => p.PropertyType == typeof(string) && p.Name != "Name" && p.Name != "Id"); //删除数据表的原有的扩展属性,它们在新的实体属性中不存在 foreach (var ext in catalog.Exts.ToList()) { if (!extProps.Select(p => p.Name).Contains(ext.Name)) { ext.IsDeleted = true; changed = true; } } //添加数据表中原来没有的扩展属性 foreach (var prop in extProps) { var extAttr = prop.GetCustomAttributes(typeof(CatalogExtAttribute), false).FirstOrDefault() as CatalogExtAttribute ?? new CatalogExtAttribute(); var ext1 = catalog.Exts.FirstOrDefault(e => e.Name == prop.Name); bool canUpdate = ext1 == null || extAttr.ForceUpdate; if (ext1 == null) { ext1 = new Base_CatalogExt { Name = prop.Name, State = ArticleState.Static + ArticleState.Published, }; catalog.Exts.Add(ext1); } if (canUpdate) { //修改ext1中各属性的状态 ext1.DataType = extAttr.DataType; ext1.AllowNull = extAttr.AllowNull; ext1.DataSource = extAttr.DataSource; ext1.DataSourceType = extAttr.DataSourceType; ext1.DefaultValue = extAttr.DefaultValue; ext1.MaxLength = extAttr.MaxLength; ext1.Ord = extAttr.Ord; changed = true; } if (ext1.State != (ArticleState.Static + ArticleState.Published)) { ext1.State = ArticleState.Static + ArticleState.Published; canUpdate = true; } if (canUpdate && ext1.Id > 0 && Provider is EFAuditDataService <Base_Catalog> ) { ((EFAuditDataService <Base_Catalog>)Provider).MarkState(ext1, System.Data.Entity.EntityState.Modified); } } return(changed); }
/// <summary> /// 根据文章的标签名称, 获取文章的某个标签值,返回根据该文章的标签属性定义的数据类型 /// </summary> /// <param name="ca">栏目文章对象</param> /// <param name="name">标签名称</param> /// <returns>标签值</returns> public static object GetExt(this Base_CatalogArticle ca, string name) { Base_CatalogExt catExt = null; if (ca != null) { catExt = SiteManager.Catalog.GetAllExts(ca.CatalogId) .FirstOrDefault(ext => ext.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); return(GetExt(ca.Article, catExt)); } return(null); }
/// <summary> /// 根据文章所在栏目的扩展属性ID,获取文章的某个标签值,返回根据该文章的标签属性定义的数据类型 /// </summary> /// <param name="ca">栏目文章对象</param> /// <param name="catExtId">栏目的扩展属性ID</param> /// <returns>标签值</returns> public static object GetExt(this Base_CatalogArticle ca, int catExtId) { Base_CatalogExt catExt = null; if (ca != null) { catExt = SiteManager.Catalog.GetAllExts(ca.CatalogId) .FirstOrDefault(ext => ext.Id == catExtId); } return(GetExt(ca.Article, catExt)); }
/// <summary> /// 获取文章的某个标签值,返回根据该文章的标签属性定义的数据类型 /// </summary> /// <param name="article"></param> /// <param name="name"></param> /// <returns></returns> public object GetExt(Base_CatalogArticle article, string name) { Base_CatalogExt catExt = null; if (article != null) { catExt = SiteManager.Catalog.GetAllExts(article.CatalogId) .FirstOrDefault(ext => ext.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); } if (catExt == null) { return(null); } var artExt = article.Article.Exts.FirstOrDefault(ext => ext.CatlogExtId == catExt.Id); if (artExt == null) { return(null); } switch ((ExtDataType)catExt.DataType) { case ExtDataType.Currency: return(CommOp.ToDecimalNull(artExt.Value)); case ExtDataType.DateAndTime: case ExtDataType.Date: return(CommOp.ToDateTimeNull(artExt.Value)); case ExtDataType.SingleNumber: return(CommOp.ToLongNull(artExt.Value)); case ExtDataType.Bool: return(CommOp.ToBool(artExt.Value)); default: return(artExt.Value); } }
/// <summary> /// 获取文章扩展展性的显示值(来自键值对的下拉列表中的显示内容) /// </summary> /// <param name="ca"></param> /// <param name="name"></param> /// <returns></returns> public static object GetExtDisplay(this Base_CatalogArticle ca, Base_CatalogExt catExt) { if (catExt.DataSource.IsEmpty()) { return(GetExt(ca, catExt)); } else { var obj = GetExt(ca, catExt); string str = CommOp.ToStr(obj); StringSpliter ss = new StringSpliter(catExt.DataSource, ";", "="); foreach (var key in ss.Keys) { if (ss[key] == str) { return(key); } } } return(GetExt(ca, catExt)); }
public static object SetExt(this Base_Article article, Base_CatalogExt catExt, object value) { if (catExt == null) { return(null); } var artExt = article.Exts.FirstOrDefault(ext => ext.CatlogExtId == catExt.Id); if (artExt == null) { artExt = new Base_ArticleExt { CatlogExtId = catExt.Id, }; article.Exts.Add(artExt); } ; string strValue = null; switch ((ExtDataType)catExt.DataType) { case ExtDataType.Currency: Decimal?dec = CommOp.ToDecimalNull(value); if (dec != null) { strValue = dec.Value.ToString(); } break; case ExtDataType.FloatNumber: double?flt = CommOp.ToDoubleNull(value); if (flt != null) { strValue = flt.Value.ToString(); } break; case ExtDataType.DateAndTime: case ExtDataType.Date: DateTime?dt = CommOp.ToDateTimeNull(value); if (dt != null) { strValue = dt.Value.ToString("yyyy-MM-dd HH:mm:ss"); } break; case ExtDataType.SingleNumber: long?lng = CommOp.ToLongNull(value); if (lng != null) { strValue = lng.Value.ToString(); } break; case ExtDataType.Bool: value = CommOp.ToBool(value); strValue = value.ToString(); break; default: strValue = CommOp.ToStr(value); if (strValue.IsEmpty()) { strValue = null; } break; } artExt.Value = strValue; return(value); }
public static object SetExt(this Base_CatalogArticle ca, Base_CatalogExt catExt, object value) { return(SetExt(ca.Article, catExt, value)); }
public static object GetExt(this Base_CatalogArticle ca, Base_CatalogExt catExt) { return(GetExt(ca.Article, catExt)); }