Beispiel #1
0
        public object GetId()
        {
            var meta = MetaDataHelper.GetMetaData(this.GetType());

            return(this.GetValue(meta.KeyColumn.ColumnName));
        }
Beispiel #2
0
        public static string GenerateClass(Type type)
        {
            StringBuilder sb   = new StringBuilder();
            var           meta = MetaDataHelper.GetMetaData(type);

            if (meta.TableName.IsNullOrWhiteSpace() || meta.KeyColumn == null)
            {
                throw new Exception(type.FullName + ":没有配置主键或者表名");
            }
            sb.Append("public   class   ").Append(type.Name).Append("Map : ClassMap<").Append(type.FullName).Append(">  \n");
            sb.AppendLine("{");
            var tableName = meta.TableName;

            sb.Append("public ").Append(type.Name).AppendLine("Map (){ ");
            //bool cache=type.GetCustAttr<CacheAttribute>()!=null;
            //if (cache)
            //sb.AppendLine("this.Cache.ReadWrite();");
            sb.Append("Table(\"").Append(tableName).AppendLine("\"); ");


            foreach (var prop in meta.Properties.Values)
            {
                if (prop.IsNotMapped)
                {
                    continue;
                }
                string linq = "(m=>m." + prop.Name + ")";
                if (prop.HasManyAttribute != null)
                {
                    sb.Append("HasMany").Append(linq);
                    //if (TypeHelper.GetElementType(prop.PropertyDescriptor.PropertyType).IsValueType)
                    //    sb.AppendFormat(".Element(\"{0}\").KeyColumn(\"{1}\").Table(\"{2}\")", hasMany.ChildKey, hasMany.ParentKey, hasMany.Table);
                    //else
                    sb.Append(".KeyColumn(\"" + prop.HasManyAttribute.ParentKey + "\")");
                    if (prop.HasManyAttribute.OrderBy.IsNotNull())
                    {
                        sb.AppendFormat(".OrderBy(\"{0}\")", prop.HasManyAttribute.OrderBy);
                    }
                    //else if (typeof(ISortable).IsAssignableFrom(prop.HasManyAttribute.ItemType))
                    //{

                    //    sb.AppendFormat(".OrderBy(\"Sort\")");
                    //}


                    //if (cache)
                    //    sb.Append(".Cache.ReadWrite()");
                    sb.Append(";\n");
                    continue;
                }

                if (prop.HasOneAttribute != null)
                {
                    sb.Append("References").Append(linq).Append(".Column(\"" + prop.HasOneAttribute.ReferenceID + "\")");
                    //if (cache)
                    //    sb.Append(".Cache.ReadWrite()");
                    sb.Append(";\n");
                    continue;
                }
                var manyToMany = prop.HasMany2ManyAttribute;
                if (manyToMany != null)
                {
                    sb.Append("HasManyToMany").Append(linq);
                    //    if (manyToMany.OrderBy.IsNotNull())
                    //    sb.AppendFormat(".AsMap(\"{0}\")", manyToMany.OrderBy);

                    string temp = ".Table(\"{0}\").ParentKeyColumn(\"{1}\").ChildKeyColumn(\"{2}\")";

                    sb.Append(string.Format(temp, manyToMany.MidTable, manyToMany.ParentKey, manyToMany.ChildKey));
                    if (manyToMany.OrderBy.IsNotNull())
                    {
                        sb.AppendFormat(".OrderBy(\"{0}\")", manyToMany.OrderBy);
                    }
                    //else if (typeof(ISortable).IsAssignableFrom(manyToMany.ItemType))
                    //{

                    //    sb.AppendFormat(".OrderBy(\"Sort\")");
                    //}
                    //if (cache)
                    //    sb.Append(".Cache.ReadWrite()");
                    sb.Append(";\n");
                    continue;
                }


                if (prop.IsKeyColumn)
                {
                    sb.Append("Id").Append(linq).Append(".GeneratedBy");
                    //   GuidComb Assigned
                    if (prop.PropertyDescriptor.PropertyType == typeof(Guid))
                    {
                        sb.Append(".GuidComb()");
                    }
                    else
                    {
                        sb.Append(".Assigned()");
                    }
                }
                else
                {
                    sb.Append("Map").Append(linq);
                }
                if (prop.RequiredAttribute != null)
                {
                    sb.Append(".Not.Nullable()");
                }

                if (prop.PropertyDescriptor.PropertyType == typeof(string))
                {
                    var maxLen = 0;
                    if (prop.StringLengthAttribute != null)
                    {
                        maxLen = prop.StringLengthAttribute.MaximumLength;
                    }
                    if (maxLen == 0)
                    {
                        maxLen = 255;
                    }
                    sb.AppendFormat(".Length({0})", maxLen);
                }
                if (prop.IndexAttribute != null)
                {
                    var indexName = "ix_" + meta.TableName + "_" + prop.Name;
                    if (!indexNameSet.Contains(indexName))
                    {
                        indexNameSet.Add(indexName);
                        if (prop.IndexAttribute.IsUnique)
                        {
                            sb.AppendFormat(".UniqueKey(\"{0}\")", indexName);
                        }
                        else
                        {
                            sb.AppendFormat(".Index(\"{0}\")", indexName);
                        }
                    }
                }
                if (prop.ColumnName != prop.Name)
                {
                    sb.AppendFormat(".Column(\"{0}\")", prop.ColumnName);
                }
                sb.AppendLine(";");
            }
            sb.AppendLine("}} ");
            //   sb.Append(@"public class usermap { public string userid {get;set;} }");
            return(sb.ToString());
        }