private Mapping.Collection CreateMap(HbmMap mapMapping, string prefix, string path, PersistentClass owner, System.Type containingType, IDictionary<string, MetaAttribute> inheritedMetas) { var map = new Map(owner); BindCollection(mapMapping, map, prefix, path, containingType, inheritedMetas); AddMapSecondPass(mapMapping, map, inheritedMetas); return map; }
public void WhenAssignComponentRelationThenUseHbmCompositeMapKeyElement() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); mapper.Component(mkm => { }); hbmMap.Item.Should().Be.OfType<HbmCompositeMapKey>(); }
public void WhenAssignComponentRelationThenAssignClass() { var keyType = typeof(MyClass); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); mapper.Component(mkm => { }); var keyElement = (HbmCompositeMapKey)hbmMap.Item; keyElement.Class.Should().Not.Be.Null(); keyElement.Class.Should().Contain("MyClass"); }
public virtual void Map(MemberInfo property, Action<IMapPropertiesMapper> collectionMapping, Action<IMapKeyRelation> keyMapping, Action<ICollectionElementRelation> mapping) { var hbm = new HbmMap {name = property.Name}; System.Type propertyType = property.GetPropertyOrFieldType(); System.Type dictionaryKeyType = propertyType.DetermineDictionaryKeyType(); System.Type dictionaryValueType = propertyType.DetermineDictionaryValueType(); collectionMapping(new MapMapper(container, dictionaryKeyType, dictionaryValueType, hbm, mapDoc)); keyMapping(new MapKeyRelation(dictionaryKeyType, hbm, mapDoc)); mapping(new CollectionElementRelation(dictionaryValueType, MapDoc, rel => hbm.Item1 = rel)); AddProperty(hbm); }
public void WhenAssignComponentRelationThenCallActionWithNotNullParameter() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); var called = false; mapper.Component(mkm => { called = true; mkm.Should().Not.Be.Null(); }); called.Should().Be.True(); }
public MapKeyRelation(Type dictionaryKeyType, HbmMap mapMapping, HbmMapping mapDoc) { if (dictionaryKeyType == null) { throw new ArgumentNullException("dictionaryKeyType"); } if (mapMapping == null) { throw new ArgumentNullException("mapMapping"); } if (mapDoc == null) { throw new ArgumentNullException("mapDoc"); } this.dictionaryKeyType = dictionaryKeyType; this.mapMapping = mapMapping; this.mapDoc = mapDoc; }
public void WhenAssignComponentRelationThenActionShouldReuseSameInstanceOfMapper() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); IComponentMapKeyMapper parameterCall1 = null; IComponentMapKeyMapper parameterCall2 = null; mapper.Component(mkm => { parameterCall1 = mkm; }); mapper.Component(mkm => { parameterCall2 = mkm; }); parameterCall1.Should().Be.SameInstanceAs(parameterCall2); }
/// <summary> /// Called for Maps /// </summary> private void BindMapSecondPass(HbmMap mapMapping, Map model, IDictionary<string, PersistentClass> persistentClasses, IDictionary<string, MetaAttribute> inheritedMetas) { BindCollectionSecondPass(mapMapping, model, persistentClasses, inheritedMetas); HbmIndex indexMapping; HbmMapKey mapKeyMapping; HbmIndexManyToMany indexManyToManyMapping; HbmMapKeyManyToMany mapKeyManyToManyMapping; HbmCompositeIndex compositeIndexMapping; HbmCompositeMapKey compositeMapKeyMapping; HbmIndexManyToAny indexManyToAnyMapping; if ((indexMapping = mapMapping.Item as HbmIndex) != null) { var value = new SimpleValue(model.CollectionTable); new ValuePropertyBinder(value, Mappings).BindSimpleValue(indexMapping, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = value; if (string.IsNullOrEmpty(model.Index.TypeName)) throw new MappingException("map index element must specify a type: " + model.Role); } else if ((mapKeyMapping = mapMapping.Item as HbmMapKey) != null) { var value = new SimpleValue(model.CollectionTable); new ValuePropertyBinder(value, Mappings).BindSimpleValue(mapKeyMapping, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = value; if (string.IsNullOrEmpty(model.Index.TypeName)) throw new MappingException("map index element must specify a type: " + model.Role); } else if ((indexManyToManyMapping = mapMapping.Item as HbmIndexManyToMany) != null) { var manyToOne = new ManyToOne(model.CollectionTable); BindIndexManyToMany(indexManyToManyMapping, manyToOne, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = manyToOne; } else if ((mapKeyManyToManyMapping = mapMapping.Item as HbmMapKeyManyToMany) != null) { var manyToOne = new ManyToOne(model.CollectionTable); BindMapKeyManyToMany(mapKeyManyToManyMapping, manyToOne, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = manyToOne; } else if ((compositeIndexMapping = mapMapping.Item as HbmCompositeIndex) != null) { var component = new Component(model); BindComponent(compositeIndexMapping, component, null, null, model.Role + ".index", model.IsOneToMany, inheritedMetas); model.Index = component; } else if ((compositeMapKeyMapping = mapMapping.Item as HbmCompositeMapKey) != null) { var component = new Component(model); BindComponent(compositeMapKeyMapping, component, null, null, model.Role + ".index", model.IsOneToMany, inheritedMetas); model.Index = component; } else if ((indexManyToAnyMapping = mapMapping.Item as HbmIndexManyToAny) != null) { var any = new Any(model.CollectionTable); BindIndexManyToAny(indexManyToAnyMapping, any, model.IsOneToMany); model.Index = any; } bool indexIsFormula = model.Index.ColumnIterator.Any(x=> x.IsFormula); if (NeedBackref(model) && !indexIsFormula) { string entityName = ((OneToMany)model.Element).ReferencedEntityName; PersistentClass referenced = mappings.GetClass(entityName); var ib = new IndexBackref(); ib.Name = '_' + model.OwnerEntityName + "." + mapMapping.Name + "IndexBackref"; ib.IsUpdateable = false; ib.IsSelectable = false; ib.CollectionRole = model.Role; ib.EntityName = model.Owner.EntityName; ib.Value = model.Index; referenced.AddProperty(ib); } }
private void AddMapSecondPass(HbmMap mapMapping, Map model, IDictionary<string, MetaAttribute> inheritedMetas) { mappings.AddSecondPass(delegate(IDictionary<string, PersistentClass> persistentClasses) { PreCollectionSecondPass(model); BindMapSecondPass(mapMapping, model, persistentClasses, inheritedMetas); PostCollectionSecondPass(model); }); }
/// <summary> /// Called for Maps /// </summary> private void BindMapSecondPass(HbmMap mapMapping, Map model, IDictionary<string, PersistentClass> persistentClasses, IDictionary<string, MetaAttribute> inheritedMetas) { BindCollectionSecondPass(mapMapping, model, persistentClasses, inheritedMetas); HbmIndex indexMapping; HbmMapKey mapKeyMapping; HbmIndexManyToMany indexManyToManyMapping; HbmMapKeyManyToMany mapKeyManyToManyMapping; HbmCompositeIndex compositeIndexMapping; HbmCompositeMapKey compositeMapKeyMapping; HbmIndexManyToAny indexManyToAnyMapping; if ((indexMapping = mapMapping.Item as HbmIndex) != null) { var value = new SimpleValue(model.CollectionTable); new ValuePropertyBinder(value, Mappings).BindSimpleValue(indexMapping, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = value; if (string.IsNullOrEmpty(model.Index.TypeName)) throw new MappingException("map index element must specify a type: " + model.Role); } else if ((mapKeyMapping = mapMapping.Item as HbmMapKey) != null) { var value = new SimpleValue(model.CollectionTable); new ValuePropertyBinder(value, Mappings).BindSimpleValue(mapKeyMapping, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = value; if (string.IsNullOrEmpty(model.Index.TypeName)) throw new MappingException("map index element must specify a type: " + model.Role); } else if ((indexManyToManyMapping = mapMapping.Item as HbmIndexManyToMany) != null) { var manyToOne = new ManyToOne(model.CollectionTable); BindIndexManyToMany(indexManyToManyMapping, manyToOne, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = manyToOne; } else if ((mapKeyManyToManyMapping = mapMapping.Item as HbmMapKeyManyToMany) != null) { var manyToOne = new ManyToOne(model.CollectionTable); BindMapKeyManyToMany(mapKeyManyToManyMapping, manyToOne, IndexedCollection.DefaultIndexColumnName, model.IsOneToMany); model.Index = manyToOne; } else if ((compositeIndexMapping = mapMapping.Item as HbmCompositeIndex) != null) { var component = new Component(model); BindComponent(compositeIndexMapping, component, null, null, model.Role + ".index", model.IsOneToMany, inheritedMetas); model.Index = component; } else if ((compositeMapKeyMapping = mapMapping.Item as HbmCompositeMapKey) != null) { var component = new Component(model); BindComponent(compositeMapKeyMapping, component, null, null, model.Role + ".index", model.IsOneToMany, inheritedMetas); model.Index = component; } else if ((indexManyToAnyMapping = mapMapping.Item as HbmIndexManyToAny) != null) { var any = new Any(model.CollectionTable); BindIndexManyToAny(indexManyToAnyMapping, any, model.IsOneToMany); model.Index = any; } }
public void WhenAssignElementRelationThenActionShouldReuseSameInstanceOfHbmElement() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); mapper.Element(mkm => mkm.Column("pizza")); mapper.Element(mkm => mkm.Length(30)); var keyElement = (HbmMapKey)hbmMap.Item; keyElement.length.Should().Be("30"); keyElement.column.Should().Be("pizza"); }
public void WhenAssignManyToManyRelationThenUseHbmMapKeyManyToManyElement() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); mapper.ManyToMany(mkm => { }); hbmMap.Item.Should().Be.OfType<HbmMapKeyManyToMany>(); }
public void WhenAssignManyToManyRelationActionShouldReuseSameInstanceOfHbmElement() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); mapper.ManyToMany(mkm => mkm.Column("pizza")); mapper.ManyToMany(mkm => mkm.ForeignKey("FK")); var keyElement = (HbmMapKeyManyToMany)hbmMap.Item; keyElement.foreignkey.Should().Be("FK"); keyElement.column.Should().Be("pizza"); }
public void WhenAssignElementRelationThenAssignType() { var keyType = typeof(string); var hbmMap = new HbmMap(); var hbmMapping = new HbmMapping(); var mapper = new MapKeyRelation(keyType, hbmMap, hbmMapping); mapper.Element(mkm => { }); var keyElement = (HbmMapKey)hbmMap.Item; keyElement.Type.name.Should().Not.Be.Null(); keyElement.Type.name.Should().Contain("String"); }