/// <summary> /// Make data property metadata for the entity /// </summary> /// <param name="propName">name of the property on the server</param> /// <param name="typeName">data type of the property, e.g. Int32</param> /// <param name="isNullable">whether the property is nullable in the database</param> /// <param name="col">Column object, used for maxLength and defaultValue</param> /// <param name="isKey">true if this property is part of the key for the entity</param> /// <param name="isVersion">true if this property contains the version of the entity (for a concurrency strategy)</param> /// <returns></returns> private Dictionary <string, object> MakeDataProperty(string propName, string typeName, bool isNullable, Column col, bool isKey, bool isVersion) { string newType; typeName = (BreezeTypeMap.TryGetValue(typeName, out newType)) ? newType : typeName; var dmap = new Dictionary <string, object>(); dmap.Add("nameOnServer", propName); dmap.Add("dataType", typeName); dmap.Add("isNullable", isNullable); if (col != null && col.DefaultValue != null) { dmap.Add("defaultValue", col.DefaultValue); } if (isKey) { dmap.Add("isPartOfKey", true); } if (isVersion) { dmap.Add("concurrencyMode", "Fixed"); } var validators = new List <Dictionary <string, string> >(); if (!isNullable) { validators.Add(new Dictionary <string, string>() { { "name", "required" }, }); } if (col != null && col.IsLengthDefined()) { dmap.Add("maxLength", col.Length); validators.Add(new Dictionary <string, string>() { { "maxLength", col.Length.ToString() }, { "name", "maxLength" } }); } string validationType; if (ValidationTypeMap.TryGetValue(typeName, out validationType)) { validators.Add(new Dictionary <string, string>() { { "name", validationType }, }); } if (validators.Any()) { dmap.Add("validators", validators); } return(dmap); }
/// <summary> /// Make data property metadata for the entity /// </summary> /// <param name="propName">name of the property on the server</param> /// <param name="type">data type of the property, e.g. Int32</param> /// <param name="isNullable">whether the property is nullable in the database</param> /// <param name="isKey">true if this property is part of the key for the entity</param> /// <param name="isVersion">true if this property contains the version of the entity (for a concurrency strategy)</param> /// <returns></returns> private Dictionary <string, object> MakeDataProperty(string propName, IType type, bool isNullable, bool isKey, bool isVersion) { string newType; var typeName = (BreezeTypeMap.TryGetValue(type.Name, out newType)) ? newType : type.Name; var dmap = new Dictionary <string, object>(); dmap.Add("nameOnServer", propName); dmap.Add("dataType", typeName); dmap.Add("isNullable", isNullable); var sqlTypes = type.SqlTypes((ISessionFactoryImplementor)this._sessionFactory); var sqlType = sqlTypes[0]; // This doesn't work; NH does not pick up the default values from the property/column definition //if (type is PrimitiveType && !(type is DateTimeOffsetType)) //{ // var def = ((PrimitiveType)type).DefaultValue; // if (def != null && def.ToString() != "0") // dmap.Add("defaultValue", def); //} if (isKey) { dmap.Add("isPartOfKey", true); } if (isVersion) { dmap.Add("concurrencyMode", "Fixed"); } var validators = new List <Dictionary <string, object> >(); if (!isNullable) { validators.Add(new Dictionary <string, object>() { { "name", "required" }, }); } if (sqlType.LengthDefined) { dmap.Add("maxLength", sqlType.Length); validators.Add(new Dictionary <string, object>() { { "maxLength", sqlType.Length }, { "name", "maxLength" } }); } string validationType; if (ValidationTypeMap.TryGetValue(typeName, out validationType)) { validators.Add(new Dictionary <string, object>() { { "name", validationType }, }); } if (validators.Any()) { dmap.Add("validators", validators); } return(dmap); }
/// <summary> /// Make data property metadata for the entity property. /// Attributes one the property are used to set some metadata values. /// </summary> /// <param name="propertyInfo">Property info for the property</param> /// <param name="containingType">Type containing the property</param> /// <param name="isKey">true if this property is part of the key for the entity</param> /// <param name="isVersion">true if this property contains the version of the entity (for a concurrency strategy)</param> /// <returns>Dictionary of metadata for the property</returns> private Dictionary <string, object> MakeDataProperty(Type containingType, PropertyInfo propertyInfo, bool isKey, bool isVersion) { var propType = _describer.GetDataPropertyType(containingType, propertyInfo); if (propType == null) { return(null); // exclude this property } var nullableType = Nullable.GetUnderlyingType(propType); var isNullable = nullableType != null || !propType.IsValueType; propType = nullableType ?? propType; var dmap = new Dictionary <string, object>(); dmap.Add("nameOnServer", propertyInfo.Name); var elementType = GetElementType(propType); if (_describer.IsComplexType(elementType)) { dmap.Add("complexTypeName", elementType.Name + ":#" + elementType.Namespace); } else { dmap.Add("dataType", elementType.Name); } if (elementType != propType) { dmap.Add("isScalar", false); } if (!isNullable) { dmap.Add("isNullable", false); } AddAttributesToDataProperty(propertyInfo, dmap, _describer); if (isKey) { dmap["isPartOfKey"] = true; } if (isVersion) { dmap["concurrencyMode"] = "Fixed"; } if (propType.IsEnum) { dmap["dataType"] = "String"; dmap["enumType"] = propType.Name; } var validators = (List <Dictionary <string, object> >)dmap.Get("validators"); if (validators == null) { validators = new List <Dictionary <string, object> >(); } if (!isNullable) { var already = FindEntry(validators, "name", "required"); if (already == null) { validators.Add(new Dictionary <string, object>() { { "name", "required" } }); } } string validationType; if (ValidationTypeMap.TryGetValue(propType.Name, out validationType)) { validators.Add(new Dictionary <string, object>() { { "name", validationType } }); } if (validators.Any()) { dmap["validators"] = validators; } return(dmap); }
/// <summary> /// Make data property metadata for the entity /// </summary> /// <param name="propName">name of the property on the server</param> /// <param name="type">data type of the property, e.g. Int32</param> /// <param name="isNullable">whether the property is nullable in the database</param> /// <param name="isKey">true if this property is part of the key for the entity</param> /// <param name="isVersion">true if this property contains the version of the entity (for a concurrency strategy)</param> /// <returns></returns> private Dictionary <string, object> MakeDataProperty(string propName, IType type, bool isNullable, bool isKey, bool isVersion) { string newType; var typeName = (BreezeTypeMap.TryGetValue(type.Name, out newType)) ? newType : type.Name; var dmap = new Dictionary <string, object>(); dmap.Add("nameOnServer", propName); dmap.Add("dataType", typeName); dmap.Add("isNullable", isNullable); var sqlTypes = type.SqlTypes((ISessionFactoryImplementor)this._sessionFactory); var sqlType = sqlTypes[0]; //if (col != null && col.DefaultValue != null) //{ // dmap.Add("defaultValue", col.DefaultValue); //} if (isKey) { dmap.Add("isPartOfKey", true); } if (isVersion) { dmap.Add("concurrencyMode", "Fixed"); } var validators = new List <Dictionary <string, string> >(); if (!isNullable) { validators.Add(new Dictionary <string, string>() { { "name", "required" }, }); } if (sqlType.LengthDefined) { dmap.Add("maxLength", sqlType.Length); validators.Add(new Dictionary <string, string>() { { "maxLength", sqlType.Length.ToString() }, { "name", "maxLength" } }); } string validationType; if (ValidationTypeMap.TryGetValue(typeName, out validationType)) { validators.Add(new Dictionary <string, string>() { { "name", validationType }, }); } if (validators.Any()) { dmap.Add("validators", validators); } return(dmap); }