public void Default_nullability_of_property_is_based_on_nullability_of_CLR_type() { var entityType = new Model().AddEntityType(typeof(object)); var stringProperty = entityType.AddProperty("stringName", typeof(string)); var nullableIntProperty = entityType.AddProperty("nullableIntName", typeof(int?)); var intProperty = entityType.AddProperty("intName", typeof(int)); Assert.True(stringProperty.IsNullable); Assert.True(nullableIntProperty.IsNullable); Assert.False(intProperty.IsNullable); }
public void Can_read_nulls() { var entityType = new Model().AddEntityType(typeof(SomeEntity)); entityType.AddProperty(SomeEntity.FooProperty); entityType.AddProperty(SomeEntity.GooProperty); entityType.AddProperty(SomeEntity.IdProperty); var factory = GetMaterializer(new EntityMaterializerSource(new MemberMapper(new FieldMatcher())), entityType); var entity = (SomeEntity)factory(new ValueBuffer(new object[] { null, null, 77 })); Assert.Equal(77, entity.Id); Assert.Null(entity.Foo); Assert.Null(entity.Goo); }
public void Property_nullability_can_be_mutated() { var entityType = new Model().AddEntityType(typeof(object)); var stringProperty = entityType.AddProperty("Name", typeof(string)); var intProperty = entityType.AddProperty("Id", typeof(int)); stringProperty.IsNullable = false; Assert.False(stringProperty.IsNullable); Assert.False(intProperty.IsNullable); stringProperty.IsNullable = true; intProperty.IsNullable = false; Assert.True(stringProperty.IsNullable); Assert.False(intProperty.IsNullable); }
public void Constructor_throws_when_principal_and_depedent_property_count_do_not_match() { var dependentEntityType = new Model().AddEntityType("D"); var principalEntityType = new Model().AddEntityType("P"); var dependentProperty1 = dependentEntityType.AddProperty("P1", typeof(int)); var dependentProperty2 = dependentEntityType.AddProperty("P2", typeof(int)); var idProperty = principalEntityType.AddProperty("Id", typeof(int)); principalEntityType.GetOrSetPrimaryKey(idProperty); Assert.Equal( CoreStrings.ForeignKeyCountMismatch("{'P1', 'P2'}", "D", "{'Id'}", "P"), Assert.Throws<InvalidOperationException>( () => dependentEntityType.AddForeignKey(new[] { dependentProperty1, dependentProperty2 }, principalEntityType.FindPrimaryKey(), principalEntityType)).Message); }
public void Can_set_ClrType() { var entityType = new Model().AddEntityType(typeof(object)); var property = entityType.AddProperty("Kake", typeof(string)); Assert.Equal(typeof(string), property.ClrType); }
public void Delegate_getter_is_returned_for_IProperty_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty("Id", typeof(int), shadow: false); Assert.Equal(7, new ClrPropertyGetterFactory().Create(idProperty).GetClrValue(new Customer { Id = 7 })); }
public void M_underscore_matching_field_is_not_used_if_type_is_not_compatible() { var entityType = new Model().AddEntityType(typeof(TheDarkSideOfTheMoon)); var property = entityType.AddProperty("SpeakToMe", typeof(int), shadow: false); var propertyInfo = entityType.ClrType.GetAnyProperty("SpeakToMe"); var fields = propertyInfo.DeclaringType.GetRuntimeFields().ToDictionary(f => f.Name); Assert.Null(new FieldMatcher().TryMatchFieldName(property, propertyInfo, fields)); }
public void Property_is_read_write_by_default() { var entityType = new Model().AddEntityType(typeof(Entity)); var property = entityType.AddProperty("Name", typeof(string)); property.IsShadowProperty = false; Assert.False(property.IsReadOnlyAfterSave); Assert.False(property.IsReadOnlyBeforeSave); }
public void Throws_if_no_match_found_and_no_property_setter() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.TimeProperty); Assert.Equal( CoreStrings.NoFieldOrSetter(typeof(TheDarkSide).FullName, "Time"), Assert.Throws <InvalidOperationException>( () => new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType)).Message); }
public void Throws_if_no_match_found_and_no_property_setter() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.TimeProperty); Assert.Equal( CoreStrings.NoFieldOrSetter(typeof(TheDarkSide).FullName, "Time"), Assert.Throws<InvalidOperationException>( () => new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType)).Message); }
public void Exception_is_returned_for_indexed_property_without_indexer() { var entityType = new Model().AddEntityType(typeof(NonIndexedClass)); var idProperty = entityType.AddProperty("Id", typeof(int)); Assert.Throws <InvalidOperationException>( () => entityType.AddIndexedProperty("PropA", typeof(string))); Assert.Throws <InvalidOperationException>( () => entityType.AddIndexedProperty("PropB", typeof(int))); }
public void Throws_if_parameterless_constructor_is_not_defined_on_entity_type() { var entityType = new Model().AddEntityType(typeof(EntityWithoutParameterlessConstructor)); entityType.AddProperty(EntityWithoutParameterlessConstructor.IdProperty); Assert.Equal( CoreStrings.NoParameterlessConstructor(typeof(EntityWithoutParameterlessConstructor).Name), Assert.Throws <InvalidOperationException>(() => GetMaterializer(new EntityMaterializerSource(), entityType)).Message); }
public void Can_set_ClrType() { var entityType = new Model().AddEntityType(typeof(object)); var property = entityType.AddProperty("Kake"); Assert.Equal(typeof(string), property.ClrType); property.ClrType = typeof(int); Assert.Equal(typeof(int), property.ClrType); }
public void Constructor_throws_when_principal_and_depedent_property_count_do_not_match() { var dependentEntityType = new Model().AddEntityType("D"); var principalEntityType = new Model().AddEntityType("P"); var dependentProperty1 = dependentEntityType.AddProperty("P1", typeof(int)); var dependentProperty2 = dependentEntityType.AddProperty("P2", typeof(int)); var idProperty = principalEntityType.AddProperty("Id", typeof(int)); principalEntityType.GetOrSetPrimaryKey(idProperty); Assert.Equal( CoreStrings.ForeignKeyCountMismatch("{'P1', 'P2'}", "D", "{'Id'}", "P"), Assert.Throws <InvalidOperationException>( () => dependentEntityType.AddForeignKey( new[] { dependentProperty1, dependentProperty2 }, principalEntityType.FindPrimaryKey(), principalEntityType)) .Message); }
public void Can_read_nulls() { var entityType = new Model().AddEntityType(typeof(SomeEntity)); entityType.AddProperty(SomeEntity.FooProperty); entityType.AddProperty(SomeEntity.GooProperty); entityType.AddProperty(SomeEntity.IdProperty); var factory = GetMaterializer(new EntityMaterializerSource(), entityType); var entity = (SomeEntity)factory( new MaterializationContext( new ValueBuffer(new object[] { null, null, 77 }), _fakeContext)); Assert.Equal(77, entity.Id); Assert.Null(entity.Foo); Assert.Null(entity.Goo); }
public void Property_is_read_write_by_default() { var entityType = new Model().AddEntityType(typeof(Entity)); var property = entityType.AddProperty("Name", typeof(string)); #pragma warning disable 618 Assert.False(property.IsReadOnlyAfterSave); Assert.False(property.IsReadOnlyBeforeSave); #pragma warning restore 618 }
public void Private_setter_in_base_class_of_overridden_property_is_used() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.UsAndThemProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom <PropertyInfo>(mapping.Item2); Assert.Equal("UsAndThem", mapping.Item2.Name); }
private static void FieldMatchTest(string propertyName, string fieldName) { var entityType = new Model().AddEntityType(typeof(TheDarkSideOfTheMoon)); var property = entityType.AddProperty(propertyName, typeof(int), shadow: false); var propertyInfo = entityType.ClrType.GetAnyProperty(propertyName); var fields = propertyInfo.DeclaringType.GetRuntimeFields().ToDictionary(f => f.Name); var matchedField = new FieldMatcher().TryMatchFieldName(property, propertyInfo, fields); Assert.Equal(fieldName, matchedField.Name); }
public void Field_name_match_is_used_in_preference_to_property_setter() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.BreatheProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom <FieldInfo>(mapping.Item2); Assert.Equal("_breathe", mapping.Item2.Name); }
public void Property_setter_is_used_if_no_matching_field_is_found() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.OnTheRunProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom <PropertyInfo>(mapping.Item2); Assert.Equal("OnTheRun", mapping.Item2.Name); }
public void Property_and_field_in_base_type_is_matched() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(OfTheMoon.TheGreatGigInTheSkyProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom <FieldInfo>(mapping.Item2); Assert.Equal("_theGreatGigInTheSky", mapping.Item2.Name); }
public void M_underscore_matching_field_is_not_used_if_type_is_not_compatible() { var entityType = new Model().AddEntityType(typeof(TheDarkSideOfTheMoon)); var property = entityType.AddProperty("SpeakToMe", typeof(int)); property.IsShadowProperty = false; var propertyInfo = entityType.ClrType.GetAnyProperty("SpeakToMe"); var fields = propertyInfo.DeclaringType.GetRuntimeFields().ToDictionary(f => f.Name); Assert.Null(new FieldMatcher().TryMatchFieldName(property, propertyInfo, fields)); }
public void Field_name_match_is_used_in_preference_to_property_setter() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.BreatheProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom<FieldInfo>(mapping.Item2); Assert.Equal("_breathe", mapping.Item2.Name); }
public void Delegate_setter_can_set_reference_type_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty(Customer.ContentProperty); var customer = new Customer { Id = 7 }; new ClrPropertySetterFactory().Create(idProperty).SetClrValue(customer, "MyString"); Assert.Equal("MyString", customer.Content); }
public void Can_mark_property_as_using_ValueGenerated() { var entityType = new Model().AddEntityType(typeof(Entity)); var property = entityType.AddProperty("Name", typeof(string)); property.ValueGenerated = ValueGenerated.OnAddOrUpdate; Assert.Equal(ValueGenerated.OnAddOrUpdate, property.ValueGenerated); property.ValueGenerated = ValueGenerated.Never; Assert.Equal(ValueGenerated.Never, property.ValueGenerated); }
public void Can_create_foreign_key_with_non_pk_principal() { var entityType = new Model().AddEntityType("E"); var keyProp = entityType.AddProperty("Id", typeof(int)); var dependentProp = entityType.AddProperty("P", typeof(int)); var principalProp = entityType.AddProperty("U", typeof(int)); entityType.GetOrSetPrimaryKey(keyProp); var principalKey = entityType.AddKey(principalProp); var foreignKey = entityType.AddForeignKey(new[] { dependentProp }, principalKey, entityType); foreignKey.IsUnique = false; Assert.Same(entityType, foreignKey.PrincipalEntityType); Assert.Same(principalProp, foreignKey.PrincipalKey.Properties.Single()); Assert.Same(dependentProp, foreignKey.Properties.Single()); Assert.False(foreignKey.IsUnique); Assert.Same(principalKey, foreignKey.PrincipalKey); }
public void Delegate_setter_is_returned_for_IProperty_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty(Customer.IdProperty); var customer = new Customer { Id = 7 }; new ClrPropertySetterFactory().Create(idProperty).SetClrValue(customer, 77); Assert.Equal(77, customer.Id); }
public void Delegate_setter_can_set_value_type_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty(Customer.IdProperty); var customer = new Customer { Id = 7 }; new ClrPropertySetterFactory().Create(idProperty).SetClrValue(customer, 1); Assert.Equal(1, customer.Id); }
public void Annotated_field_name_is_used_if_present() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.SpeakToMeProperty); property["BackingField"] = "fieldForSpeak"; var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.Equal("fieldForSpeak", mapping.Item2.Name); }
public void Can_mark_property_as_concurrency_token() { var entityType = new Model().AddEntityType(typeof(Entity)); var property = entityType.AddProperty("Name", typeof(string)); property.IsConcurrencyToken = true; Assert.True(property.IsConcurrencyToken); property.IsConcurrencyToken = false; Assert.False(property.IsConcurrencyToken); }
public void Property_setter_is_used_if_no_matching_field_is_found() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.OnTheRunProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom<PropertyInfo>(mapping.Item2); Assert.Equal("OnTheRun", mapping.Item2.Name); }
public void Throws_if_annotated_field_name_is_not_found() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.SpeakToMeProperty); property["BackingField"] = "_speakToMe"; Assert.Equal( CoreStrings.MissingBackingField(typeof(TheDarkSide).FullName, "SpeakToMe", "_speakToMe"), Assert.Throws<InvalidOperationException>( () => new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType)).Message); }
public void IsRequired_false_for_composite_FK_by_default() { var entityType = new Model().AddEntityType("E"); var property = entityType.AddProperty("Id1", typeof(int)); var property1 = entityType.AddProperty("Id2", typeof(string)); property1.IsNullable = false; entityType.GetOrSetPrimaryKey(new[] { property, property1 }); var dependentProp1 = entityType.AddProperty("P1", typeof(int)); var dependentProp2 = entityType.AddProperty("P2", typeof(string)); var foreignKey = entityType.AddForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.FindPrimaryKey(), entityType); Assert.False(foreignKey.IsRequired); }
public void Can_create_materializer_for_entity_with_fields() { var entityType = new Model().AddEntityType(typeof(SomeEntityWithFields)); entityType.AddProperty(SomeEntityWithFields.EnumProperty); entityType.AddProperty(SomeEntityWithFields.FooProperty); entityType.AddProperty(SomeEntityWithFields.GooProperty); entityType.AddProperty(SomeEntityWithFields.IdProperty); entityType.AddProperty(SomeEntityWithFields.MaybeEnumProperty); var factory = GetMaterializer(new EntityMaterializerSource(new MemberMapper(new FieldMatcher())), entityType); var gu = Guid.NewGuid(); var entity = (SomeEntityWithFields)factory(new ValueBuffer(new object[] { SomeEnum.EnumValue, "Fu", gu, 77, null })); Assert.Equal(77, entity.Id); Assert.Equal("Fu", entity.Foo); Assert.Equal(gu, entity.Goo); Assert.Equal(SomeEnum.EnumValue, entity.Enum); Assert.Null(entity.MaybeEnum); }
public void Property_and_field_in_base_type_is_matched_even_when_overridden() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.MoneyProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom <FieldInfo>(mapping.Item2); Assert.Equal("_money", mapping.Item2.Name); }
public void Property_can_be_marked_as_read_only_after_save() { var entityType = new Model().AddEntityType(typeof(Entity)); var property = entityType.AddProperty("Name", typeof(string)); #pragma warning disable 618 property.IsReadOnlyAfterSave = true; Assert.True(property.IsReadOnlyAfterSave); #pragma warning restore 618 }
public void Delegate_setter_can_set_nullable_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty(Customer.OptionalIntProperty); var customer = new Customer { Id = 7 }; new ClrPropertySetterFactory().Create(idProperty).SetClrValue(customer, 3); Assert.Equal(3, customer.OptionalInt); }
public void Throws_if_annotated_field_if_types_not_compatible() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.SpeakToMeProperty); property["BackingField"] = "_badFieldForSpeak"; Assert.Equal( CoreStrings.BadBackingFieldType("_badFieldForSpeak", typeof(string).Name, typeof(TheDarkSide).FullName, "SpeakToMe", typeof(int).Name), Assert.Throws<InvalidOperationException>( () => new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType)).Message); }
public void Can_create_materializer_for_entity_with_auto_properties() { var entityType = new Model().AddEntityType(typeof(SomeEntity)); entityType.AddProperty(SomeEntity.EnumProperty); entityType.AddProperty(SomeEntity.FooProperty); entityType.AddProperty(SomeEntity.GooProperty); entityType.AddProperty(SomeEntity.IdProperty); entityType.AddProperty(SomeEntity.MaybeEnumProperty); var factory = GetMaterializer(new EntityMaterializerSource(), entityType); var gu = Guid.NewGuid(); var entity = (SomeEntity)factory(new ValueBuffer(new object[] { SomeEnum.EnumValue, "Fu", gu, 77, SomeEnum.EnumValue })); Assert.Equal(77, entity.Id); Assert.Equal("Fu", entity.Foo); Assert.Equal(gu, entity.Goo); Assert.Equal(SomeEnum.EnumValue, entity.Enum); Assert.Equal(SomeEnum.EnumValue, entity.MaybeEnum); }
public void Throws_if_annotated_field_if_types_not_compatible() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.SpeakToMeProperty); property["BackingField"] = "_badFieldForSpeak"; Assert.Equal( CoreStrings.BadBackingFieldType("_badFieldForSpeak", typeof(string).Name, typeof(TheDarkSide).FullName, "SpeakToMe", typeof(int).Name), Assert.Throws <InvalidOperationException>( () => new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType)).Message); }
public void Throws_if_annotated_field_name_is_not_found() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.SpeakToMeProperty); property["BackingField"] = "_speakToMe"; Assert.Equal( CoreStrings.MissingBackingField(typeof(TheDarkSide).FullName, "SpeakToMe", "_speakToMe"), Assert.Throws <InvalidOperationException>( () => new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType)).Message); }
public void Can_create_materializer_for_entity_with_fields() { var entityType = new Model().AddEntityType(typeof(SomeEntityWithFields)); entityType.AddProperty(SomeEntityWithFields.EnumProperty).SetField("_enum"); entityType.AddProperty(SomeEntityWithFields.FooProperty).SetField("_foo"); entityType.AddProperty(SomeEntityWithFields.GooProperty).SetField("_goo"); entityType.AddProperty(SomeEntityWithFields.IdProperty).SetField("_id"); entityType.AddProperty(SomeEntityWithFields.MaybeEnumProperty).SetField("_maybeEnum"); var factory = GetMaterializer(new EntityMaterializerSource(), entityType); var gu = Guid.NewGuid(); var entity = (SomeEntityWithFields)factory(new ValueBuffer(new object[] { SomeEnum.EnumValue, "Fu", gu, 77, null }), null); Assert.Equal(77, entity.Id); Assert.Equal("Fu", entity.Foo); Assert.Equal(gu, entity.Goo); Assert.Equal(SomeEnum.EnumValue, entity.Enum); Assert.Null(entity.MaybeEnum); }
public void Can_create_foreign_key() { var entityType = new Model().AddEntityType("E"); var dependentProp = entityType.AddProperty("P", typeof(int)); var principalProp = entityType.AddProperty("Id", typeof(int)); entityType.GetOrSetPrimaryKey(principalProp); var foreignKey = entityType.AddForeignKey(new[] { dependentProp }, entityType.FindPrimaryKey(), entityType, ConfigurationSource.Convention); foreignKey.IsUnique = true; Assert.Same(entityType, foreignKey.PrincipalEntityType); Assert.Same(principalProp, foreignKey.PrincipalKey.Properties.Single()); Assert.Same(dependentProp, foreignKey.Properties.Single()); Assert.True(foreignKey.IsUnique); Assert.Same(entityType.FindPrimaryKey(), foreignKey.PrincipalKey); Assert.Equal(ConfigurationSource.Convention, foreignKey.GetConfigurationSource()); foreignKey.UpdateConfigurationSource(ConfigurationSource.DataAnnotation); Assert.Equal(ConfigurationSource.DataAnnotation, foreignKey.GetConfigurationSource()); }
public void Delegate_getter_is_returned_for_IProperty_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty("Id", typeof(int), ConfigurationSource.Explicit, ConfigurationSource.Explicit); Assert.Equal( 7, new ClrPropertyGetterFactory().Create(idProperty).GetClrValue( new Customer { Id = 7 })); }
public void Properties_which_are_part_of_primary_key_cannot_be_made_nullable() { var entityType = new Model().AddEntityType(typeof(object)); var stringProperty = entityType.AddProperty("Name", typeof(string)); stringProperty.IsNullable = false; stringProperty.DeclaringEntityType.SetPrimaryKey(stringProperty); Assert.Equal( CoreStrings.CannotBeNullablePK("Name", "object"), Assert.Throws <InvalidOperationException>(() => stringProperty.IsNullable = true).Message); }
public void Adding_a_nullable_property_to_a_key_throws() { var entityType = new Model().AddEntityType(typeof(object)); var stringProperty = entityType.AddProperty("Name", typeof(string)); stringProperty.IsNullable = true; Assert.True(stringProperty.IsNullable); Assert.Equal(CoreStrings.NullableKey(typeof(object).DisplayName(), stringProperty.Name), Assert.Throws<InvalidOperationException>(() => stringProperty.DeclaringEntityType.AddKey(stringProperty)).Message); }
public void Adding_a_nullable_property_to_a_key_throws() { var entityType = new Model().AddEntityType(typeof(object)); var stringProperty = entityType.AddProperty("Name", typeof(string)); stringProperty.IsNullable = true; Assert.True(stringProperty.IsNullable); Assert.Equal(CoreStrings.NullableKey(typeof(object).DisplayName(), stringProperty.Name), Assert.Throws <InvalidOperationException>(() => stringProperty.DeclaringEntityType.AddKey(stringProperty)).Message); }
public void Annotated_field_name_is_used_if_present() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.SpeakToMeProperty); property["BackingField"] = "fieldForSpeak"; var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.Equal("fieldForSpeak", mapping.Item2.Name); }
public virtual void Navigations_can_have_field_cleared() { var entityType = new Model().AddEntityType(typeof(FullProp)); var property = entityType.AddProperty("Id", typeof(int)); var key = entityType.SetPrimaryKey(property); var foreignKey = entityType.AddForeignKey(property, key, entityType); var propertyInfo = typeof(FullProp).GetAnyProperty("Reference"); Properties_can_have_field_cleared_test( foreignKey.HasDependentToPrincipal(propertyInfo), propertyInfo, "_reference"); }
private static void FieldMatchTest(string propertyName, string fieldName) { var entityType = new Model().AddEntityType(typeof(TheDarkSideOfTheMoon)); var property = entityType.AddProperty(propertyName, typeof(int)); property.IsShadowProperty = false; var propertyInfo = entityType.ClrType.GetAnyProperty(propertyName); var fields = propertyInfo.DeclaringType.GetRuntimeFields().ToDictionary(f => f.Name); var matchedField = new FieldMatcher().TryMatchFieldName(property, propertyInfo, fields); Assert.Equal(fieldName, matchedField.Name); }
public void Delegate_setter_can_set_nullable_property_with_null_value() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty(Customer.OptionalIntProperty); var customer = new Customer { Id = 7 }; new ClrPropertySetterFactory().Create(idProperty).SetClrValue(customer, null); Assert.Null(customer.OptionalInt); }
public void Throws_if_parameterless_constructor_is_not_defined_on_entity_type() { var entityType = new Model().AddEntityType(typeof(EntityWithoutParameterlessConstructor)); entityType.AddProperty(EntityWithoutParameterlessConstructor.IdProperty); Assert.Equal( CoreStrings.NoParameterlessConstructor(typeof(EntityWithoutParameterlessConstructor).Name), Assert.Throws<InvalidOperationException>(() => GetMaterializer(new EntityMaterializerSource(new MemberMapper(new FieldMatcher())), entityType)).Message); }
public void Property_and_field_in_base_type_is_matched() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(OfTheMoon.TheGreatGigInTheSkyProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom<FieldInfo>(mapping.Item2); Assert.Equal("_theGreatGigInTheSky", mapping.Item2.Name); }
public void Can_create_materializer_for_entity_ignoring_shadow_fields() { var entityType = new Model().AddEntityType(typeof(SomeEntity)); entityType.AddProperty(SomeEntity.IdProperty); entityType.AddProperty("IdShadow", typeof(int)); entityType.AddProperty(SomeEntity.FooProperty); entityType.AddProperty("FooShadow", typeof(string)); entityType.AddProperty(SomeEntity.GooProperty); entityType.AddProperty("GooShadow", typeof(Guid)); var factory = GetMaterializer(new EntityMaterializerSource(new MemberMapper(new FieldMatcher())), entityType); var gu = Guid.NewGuid(); var entity = (SomeEntity)factory(new ValueBuffer(new object[] { "Fu", "FuS", gu, Guid.NewGuid(), 77, 777 })); Assert.Equal(77, entity.Id); Assert.Equal("Fu", entity.Foo); Assert.Equal(gu, entity.Goo); }
public void Delegate_setter_can_set_enum_property() { var entityType = new Model().AddEntityType(typeof(Customer)); var idProperty = entityType.AddProperty(Customer.FlagProperty); var customer = new Customer { Id = 7 }; new ClrPropertySetterFactory().Create(idProperty).SetClrValue(customer, Flag.One); Assert.Equal(Flag.One, customer.Flag); }
public void Delegate_setter_can_set_on_virtual_privatesetter_property_no_override_singlebasetype() { var entityType = new Model().AddEntityType(typeof(ConcreteEntity1)); var property = entityType.AddProperty(typeof(ConcreteEntity1).GetProperty(nameof(ConcreteEntity1.VirtualPrivateProperty_NoOverride))); var entity = new ConcreteEntity1(); new ClrPropertySetterFactory().Create(property).SetClrValue(entity, 100); Assert.Equal(100, entity.VirtualPrivateProperty_NoOverride); }
public void Delegate_setter_can_set_on_privatesetter_property_multiplebasetypes() { var entityType = new Model().AddEntityType(typeof(ConcreteEntity2)); var property = entityType.AddProperty(typeof(ConcreteEntity2).GetProperty(nameof(ConcreteEntity2.PrivateProperty))); var entity = new ConcreteEntity2(); new ClrPropertySetterFactory().Create(property).SetClrValue(entity, 100); Assert.Equal(100, entity.PrivateProperty); }
public void Private_setter_in_base_class_of_overridden_property_is_used() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.UsAndThemProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom<PropertyInfo>(mapping.Item2); Assert.Equal("UsAndThem", mapping.Item2.Name); }
public void Property_and_field_in_base_type_is_matched_even_when_overridden() { var entityType = new Model().AddEntityType(typeof(TheDarkSide)); var property = entityType.AddProperty(TheDarkSide.MoneyProperty); var mapping = new MemberMapper(new FieldMatcher()).MapPropertiesToMembers(entityType).Single(); Assert.Same(property, mapping.Item1); Assert.IsAssignableFrom<FieldInfo>(mapping.Item2); Assert.Equal("_money", mapping.Item2.Name); }
public void Delegate_setter_throws_if_no_setter_found() { var entityType = new Model().AddEntityType(typeof(ConcreteEntity1)); var property = entityType.AddProperty(typeof(ConcreteEntity1).GetProperty(nameof(ConcreteEntity1.NoSetterProperty))); // ReSharper disable once NotAccessedVariable var _ = new ConcreteEntity1(); Assert.Throws<InvalidOperationException>(() => new ClrPropertySetterFactory().Create(property)); entityType = new Model().AddEntityType(typeof(ConcreteEntity2)); property = entityType.AddProperty(typeof(ConcreteEntity2).GetProperty(nameof(ConcreteEntity2.NoSetterProperty))); // ReSharper disable once RedundantAssignment _ = new ConcreteEntity2(); Assert.Throws<InvalidOperationException>(() => new ClrPropertySetterFactory().Create(property)); }