コード例 #1
0
 public void ApplyMapping(ConventionModelMapper mapper)
 {
     mapper.BeforeMapClass += (modelInspector, type, classCustomizer) => {
         classCustomizer.Id(type.GetProperty(IdentityPropertyName, IdentityBindingFlags),
                            m => {
             m.Generator(new NativeGeneratorDef());
             m.Type(new NHibernate.Type.Int64Type());
             m.Column(formatter.GetIdentityColumnName(type));
         });
     };
 }
コード例 #2
0
ファイル: ManyToOneMapping.cs プロジェクト: csf-dev/agiil
        public void ApplyMapping(ConventionModelMapper mapper)
        {
            mapper.BeforeMapManyToOne += (modelInspector, member, propertyCustomizer) => {
                var parentType = member.LocalMember.GetPropertyOrFieldType();
                var childType  = member.LocalMember.ReflectedType;

                propertyCustomizer.Column(formatter.GetIdentityColumnName(parentType));
                propertyCustomizer.ForeignKey(formatter.GetForeignKeyConstraintName(parentType, childType));
                propertyCustomizer.Index(formatter.GetIndexName(childType, parentType));
                propertyCustomizer.Cascade(Cascade.Persist);
            };
        }
コード例 #3
0
ファイル: ManyToManyMapping.cs プロジェクト: csf-dev/agiil
        public void ApplyMapping(ConventionModelMapper mapper)
        {
            mapper.IsManyToMany((member, declared) => {
                var property = member as PropertyInfo;

                if (property == null || !property.CanRead)
                {
                    return(false);
                }

                if (property.GetCustomAttribute <ManyToManyAttribute>() != null)
                {
                    return(true);
                }

                return(false);
            });

            mapper.BeforeMapSet += (modelInspector, propertyPath, propertyCustomizer) => {
                var manyToManyAttrib = propertyPath.LocalMember.GetCustomAttribute <ManyToManyAttribute>();
                if (manyToManyAttrib == null)
                {
                    return;
                }

                if (manyToManyAttrib.IsActiveSide)
                {
                    propertyCustomizer.Cascade(Cascade.Persist);
                    propertyCustomizer.Inverse(false);
                }
                else
                {
                    propertyCustomizer.Cascade(Cascade.None);
                    propertyCustomizer.Inverse(true);
                }

                propertyCustomizer.Access(typeof(SourceCollectionAccessor));

                var activeEntityType   = GetActiveType(propertyPath.LocalMember, manyToManyAttrib.IsActiveSide);
                var inactiveEntityType = GetInactiveType(propertyPath.LocalMember, manyToManyAttrib.IsActiveSide);

                propertyCustomizer.Table(formatter.GetManyToManyTableName(activeEntityType, inactiveEntityType));

                propertyCustomizer.Key(keyMap => {
                    var parentType = GetDeclaringType(propertyPath.LocalMember);
                    var childType  = GetCollectionType(propertyPath.LocalMember);

                    var columnName = formatter.GetIdentityColumnName(parentType);
                    var fkName     = formatter.GetForeignKeyConstraintName(activeEntityType, inactiveEntityType);

                    keyMap.Column(columnName);
                    keyMap.ForeignKey(fkName);
                });
            };

            mapper.BeforeMapManyToMany += (modelInspector, propertyPath, collectionRelationManyToManyCustomizer) => {
                var myType       = GetDeclaringType(propertyPath.LocalMember);
                var oppositeType = GetCollectionType(propertyPath.LocalMember);

                collectionRelationManyToManyCustomizer.Column(formatter.GetIdentityColumnName(oppositeType));
                collectionRelationManyToManyCustomizer.ForeignKey(formatter.GetForeignKeyConstraintName(oppositeType, myType));
            };
        }
コード例 #4
0
ファイル: OneToManyMapping.cs プロジェクト: csf-dev/agiil
        public void ApplyMapping(ConventionModelMapper mapper)
        {
            mapper.IsOneToMany((member, isDeclared) => {
                if (isDeclared)
                {
                    return(true);
                }

                return(member.GetCustomAttribute <ManyToManyAttribute>() == null);
            });

            mapper.IsSet((member, isDeclared) => {
                if (isDeclared)
                {
                    return(true);
                }

                var prop = member as PropertyInfo;

                if (prop == null || !prop.CanRead)
                {
                    return(false);
                }

                var propertyType = prop.PropertyType;

                if (!propertyType.IsGenericType || propertyType.GetGenericTypeDefinition() != typeof(ISet <>))
                {
                    return(false);
                }

                if (!typeof(IEntity).IsAssignableFrom(propertyType.GetGenericArguments()[0]))
                {
                    return(false);
                }

                return(true);
            });

            mapper.BeforeMapSet += (modelInspector, propertyPath, propertyCustomizer) => {
                if (propertyPath.LocalMember.GetCustomAttribute <ManyToManyAttribute>() != null)
                {
                    return;
                }

                propertyCustomizer.Cascade(Cascade.All | Cascade.DeleteOrphans);
                propertyCustomizer.Access(typeof(SourceCollectionAccessor));

                propertyCustomizer.Key(keyMap => {
                    var parentType = propertyPath.LocalMember.DeclaringType;
                    var childType  = propertyPath.LocalMember.GetPropertyOrFieldType().GetGenericArguments()[0];

                    var columnName = formatter.GetIdentityColumnName(parentType);
                    var fkName     = formatter.GetForeignKeyConstraintName(parentType, childType);

                    keyMap.Column(columnName);
                    keyMap.ForeignKey(fkName);
                });

                propertyCustomizer.Inverse(true);
            };
        }