private void BindComponent(System.Type reflectedClass, string path, HbmCompositeId idSchema) { if (idSchema.@class != null) { compositeId.ComponentClass = ClassForNameChecked(idSchema.@class, mappings, "component class not found: {0}"); compositeId.IsEmbedded = false; } else if (reflectedClass != null) { compositeId.ComponentClass = reflectedClass; compositeId.IsEmbedded = false; } else { // an "embedded" component (ids only) if (compositeId.Owner.HasPocoRepresentation) { compositeId.ComponentClass = compositeId.Owner.MappedClass; compositeId.IsEmbedded = true; } else { // if not - treat compositeid as a dynamic-component compositeId.IsDynamic = true; } } foreach (object item in idSchema.Items ?? new object[0]) { var keyManyToOneSchema = item as HbmKeyManyToOne; var keyPropertySchema = item as HbmKeyProperty; if (keyManyToOneSchema != null) { var manyToOne = new ManyToOne(compositeId.Table); string propertyName = keyManyToOneSchema.name == null ? null : StringHelper.Qualify(path, keyManyToOneSchema.name); BindManyToOne(keyManyToOneSchema, manyToOne, propertyName, false); Property property = CreateProperty(manyToOne, keyManyToOneSchema.name, compositeId.ComponentClass, keyManyToOneSchema); compositeId.AddProperty(property); } else if (keyPropertySchema != null) { var value = new SimpleValue(compositeId.Table); string propertyName = keyPropertySchema.name == null ? null : StringHelper.Qualify(path, keyPropertySchema.name); BindSimpleValue(keyPropertySchema, value, false, propertyName); Property property = CreateProperty(value, keyPropertySchema.name, compositeId.ComponentClass, keyPropertySchema); compositeId.AddProperty(property); } } }
public ComponentAsIdMapper(System.Type componentType, MemberInfo declaringTypeMember, HbmCompositeId id, HbmMapping mapDoc) { this.id = id; this.mapDoc = mapDoc; id.@class = componentType.GetShortClassName(mapDoc); accessorPropertyMapper = new AccessorPropertyMapper(declaringTypeMember.DeclaringType, declaringTypeMember.Name, x => id.access = x); }
public void WhenCreatedThenSetTheComponentClass() { var mapdoc = new HbmMapping(); var component = new HbmCompositeId(); new ComponentAsIdMapper(typeof(PersonId), For<Person>.Property(x=> x.Id), component, mapdoc); [email protected]().Contain("PersonId"); }
public void WhenCreatedThenSetTheComponentClass() { var mapdoc = new HbmMapping(); var component = new HbmCompositeId(); new ComponentAsIdMapper(typeof(PersonId), For<Person>.Property(x=> x.Id), component, mapdoc); Assert.That(component.@class, Is.StringContaining("PersonId")); }
public void CallMapManyToOneMapper() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComposedIdMapper(typeof(Person), compositeId, mapdoc); var called = false; mapper.ManyToOne(For<Person>.Property(ts => ts.User), x => called = true); called.Should().Be.True(); }
public void CallMapManyToOneMapper() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComponentAsIdMapper(typeof(PersonId), For<Person>.Property(x => x.Id), compositeId, mapdoc); var called = false; mapper.ManyToOne(For<PersonId>.Property(ts => ts.User), x => called = true); Assert.That(called, Is.True); }
public void CallPropertyMapper() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComponentAsIdMapper(typeof(PersonId), For<Person>.Property(x => x.Id), compositeId, mapdoc); var called = false; mapper.Property(For<PersonId>.Property(ts => ts.Email), x => called = true); called.Should().Be.True(); }
public void CallPropertyMapper() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComposedIdMapper(typeof(Person), compositeId, mapdoc); var called = false; mapper.Property(For<Person>.Property(ts => ts.Email), x => called = true); Assert.That(called, Is.True); }
public void CanMapManyToOne() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComponentAsIdMapper(typeof(PersonId), For<Person>.Property(x => x.Id), compositeId, mapdoc); mapper.ManyToOne(For<PersonId>.Property(ts => ts.User), x => { }); Assert.That(compositeId.Items, Has.Length.EqualTo(1)); Assert.That(compositeId.Items.First(), Is.TypeOf<HbmKeyManyToOne>()); Assert.That(compositeId.Items.OfType<HbmKeyManyToOne>().First().Name, Is.EqualTo("User")); }
public void CanMapProperty() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComponentAsIdMapper(typeof(PersonId), For<Person>.Property(x => x.Id), compositeId, mapdoc); mapper.Property(For<PersonId>.Property(ts => ts.Email), x => { }); compositeId.Items.Should().Have.Count.EqualTo(1); compositeId.Items.First().Should().Be.OfType<HbmKeyProperty>(); compositeId.Items.OfType<HbmKeyProperty>().First().Name.Should().Be.EqualTo("Email"); }
public void CanMapManyToOne() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComposedIdMapper(typeof(Person), compositeId, mapdoc); mapper.ManyToOne(For<Person>.Property(ts => ts.User), x => { }); compositeId.Items.Should().Have.Count.EqualTo(1); compositeId.Items.First().Should().Be.OfType<HbmKeyManyToOne>(); compositeId.Items.OfType<HbmKeyManyToOne>().First().Name.Should().Be.EqualTo("User"); }
public void CanMapProperty() { var mapdoc = new HbmMapping(); var compositeId = new HbmCompositeId(); var mapper = new ComposedIdMapper(typeof(Person), compositeId, mapdoc); mapper.Property(For<Person>.Property(ts => ts.Email), x => { }); Assert.That(compositeId.Items, Has.Length.EqualTo(1)); Assert.That(compositeId.Items.First(), Is.TypeOf<HbmKeyProperty>()); Assert.That(compositeId.Items.OfType<HbmKeyProperty>().First().Name, Is.EqualTo("Email")); }
public void BindCompositeId(HbmCompositeId idSchema, PersistentClass rootClass) { if (idSchema == null) return; compositeId = new Component(rootClass); rootClass.Identifier = compositeId; if (idSchema.name == null) { BindComponent(null, "id", idSchema); rootClass.HasEmbeddedIdentifier = compositeId.IsEmbedded; } else { System.Type reflectedClass = GetPropertyType(rootClass.MappedClass, idSchema.name, idSchema); BindComponent(reflectedClass, idSchema.name, idSchema); Mapping.Property prop = new Mapping.Property(compositeId); BindProperty(prop, idSchema); rootClass.IdentifierProperty = prop; } compositeId.Table.SetIdentifierValue(compositeId); compositeId.NullValue = GetXmlEnumAttribute(idSchema.unsavedvalue); System.Type compIdClass = compositeId.ComponentClass; //<Simon date='26.04.2010'> if(compositeId.IsDynamic) return; //</Simon> if (!ReflectHelper.OverridesEquals(compIdClass)) throw new MappingException( "composite-id class must override Equals(): " + compIdClass.FullName ); if (!ReflectHelper.OverridesGetHashCode(compIdClass)) throw new MappingException( "composite-id class must override GetHashCode(): " + compIdClass.FullName ); // Serializability check not ported }
public void BindCompositeId(HbmCompositeId idSchema, PersistentClass rootClass) { if (idSchema == null) { return; } compositeId = new Component(rootClass); compositeId.IsKey = true; rootClass.Identifier = compositeId; if (idSchema.name == null) { BindComponent(null, "id", idSchema); rootClass.HasEmbeddedIdentifier = compositeId.IsEmbedded; } else { System.Type reflectedClass = GetPropertyType(rootClass.MappedClass, idSchema.name, idSchema); BindComponent(reflectedClass, idSchema.name, idSchema); var prop = new Property(compositeId); BindProperty(prop, idSchema); rootClass.IdentifierProperty = prop; } compositeId.Table.SetIdentifierValue(compositeId); compositeId.NullValue = idSchema.unsavedvalue.ToNullValue(); System.Type compIdClass = compositeId.ComponentClass; if (!ReflectHelper.OverridesEquals(compIdClass)) { throw new MappingException("composite-id class must override Equals(): " + compIdClass.FullName); } if (!ReflectHelper.OverridesGetHashCode(compIdClass)) { throw new MappingException("composite-id class must override GetHashCode(): " + compIdClass.FullName); } // Serializability check not ported }
public void BindCompositeId(HbmCompositeId idSchema, PersistentClass rootClass) { if (idSchema == null) { return; } compositeId = new Component(rootClass); compositeId.IsKey = true; rootClass.Identifier = compositeId; if (idSchema.name == null) { BindComponent(null, "id", idSchema); rootClass.HasEmbeddedIdentifier = compositeId.IsEmbedded; } else { System.Type reflectedClass = GetPropertyType(rootClass.MappedClass, idSchema.name, idSchema); BindComponent(reflectedClass, idSchema.name, idSchema); var prop = new Property(compositeId); BindProperty(prop, idSchema); rootClass.IdentifierProperty = prop; } compositeId.Table.SetIdentifierValue(compositeId); compositeId.NullValue = idSchema.unsavedvalue.ToNullValue(); if (!compositeId.IsDynamic) { CheckEqualsAndGetHashCodeOverride(); } // Serializability check not ported }
public ComposedIdMapper(System.Type container, HbmCompositeId id, HbmMapping mapDoc) { this.container = container; this.id = id; this.mapDoc = mapDoc; }
private System.Type GetPropertyType(System.Type containingType, string propertyName, HbmCompositeId idSchema) { if (idSchema.@class != null) return ClassForNameChecked(idSchema.@class, mappings, "could not find class: {0}"); else if (containingType == null) return null; else { string access = idSchema.access ?? mappings.DefaultAccess; return ReflectHelper.ReflectedPropertyClass(containingType, propertyName, access); } }
private void BindProperty(Mapping.Property property, HbmCompositeId idSchema) { property.Name = idSchema.name; if (property.Value.Type == null) throw new MappingException("could not determine a property type for: " + property.Name); property.PropertyAccessorName = idSchema.access ?? mappings.DefaultAccess; property.Cascade = mappings.DefaultCascade; property.IsUpdateable = true; property.IsInsertable = true; property.IsOptimisticLocked = true; property.Generation = PropertyGeneration.Never; property.MetaAttributes = new Dictionary<string, MetaAttribute>(); LogMappedProperty(property); }