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 = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey(), entityType, entityType) { IsUnique = true }; Assert.Same(entityType, foreignKey.PrincipalEntityType); Assert.Same(principalProp, foreignKey.PrincipalKey.Properties.Single()); Assert.Same(dependentProp, foreignKey.Properties.Single()); Assert.True(foreignKey.IsUnique.Value); Assert.Same(entityType.GetPrimaryKey(), foreignKey.PrincipalKey); }
public void Can_create_foreign_key() { var entityType = new Model().AddEntityType("E"); var dependentProp = entityType.GetOrAddProperty("P", typeof(int), shadowProperty: true); var principalProp = entityType.GetOrAddProperty("Id", typeof(int), shadowProperty: true); entityType.GetOrSetPrimaryKey(principalProp); var foreignKey = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey()) { IsUnique = true }; Assert.Same(entityType, foreignKey.PrincipalEntityType); Assert.Same(principalProp, foreignKey.PrincipalKey.Properties.Single()); Assert.Same(dependentProp, foreignKey.Properties.Single()); Assert.True(foreignKey.IsUnique.Value); Assert.Same(entityType.GetPrimaryKey(), foreignKey.PrincipalKey); }
public override T Insert(T item) { var expando = SetDataForDocument(item); expando = Model.Insert(expando); if (Model.PrimaryKeyMapping.IsAutoIncementing) { var newId = Model.GetPrimaryKey(expando); this.SetPrimaryKey(item, newId); // update document body of autoinc Pk value (insert and update should go within transaction, wait for Biggy transactions) Update(item); } return(item); }
public void IsRequired_true_when_dependent_property_not_nullable() { var entityType = new Model().AddEntityType("E"); entityType.GetOrSetPrimaryKey(entityType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)); var dependentProp = entityType.GetOrAddProperty("P", typeof(int), shadowProperty: true); dependentProp.IsNullable = false; var foreignKey = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey()); Assert.Null(foreignKey.IsRequired); Assert.True(((IForeignKey)foreignKey).IsRequired); }
public void IsRequired_and_IsUnique_null_when_dependent_property_nullable_by_default() { var entityType = new Model().AddEntityType("E"); entityType.GetOrSetPrimaryKey(entityType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)); var dependentProp = entityType.GetOrAddProperty("P", typeof(int?), shadowProperty: true); var foreignKey = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey()); Assert.Null(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); Assert.Null(foreignKey.IsUnique); Assert.False(((IForeignKey)foreignKey).IsUnique); }
public void IsRequired_false_when_dependent_property_nullable() { var entityType = new Model().AddEntityType("E"); var property = entityType.AddProperty("Id", typeof(int)); entityType.GetOrSetPrimaryKey(property); var dependentProp = entityType.AddProperty("P", typeof(int?)); dependentProp.IsNullable = true; var foreignKey = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey(), entityType, entityType); Assert.False(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); }
public void Constructor_throws_when_principal_and_depedent_property_count_do_not_match() { var dependentType = new Model().AddEntityType("D"); var principalType = new Model().AddEntityType("P"); var dependentProperty1 = dependentType.GetOrAddProperty("P1", typeof(int), shadowProperty: true); var dependentProperty2 = dependentType.GetOrAddProperty("P2", typeof(int), shadowProperty: true); principalType.GetOrSetPrimaryKey(principalType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)); Assert.Equal( Strings.ForeignKeyCountMismatch("{'P1', 'P2'}", "D", "{'Id'}", "P"), Assert.Throws<InvalidOperationException>( () => new ForeignKey(new[] { dependentProperty1, dependentProperty2 }, principalType.GetPrimaryKey(), principalType)).Message); }
public void It_adds_composite_key() { var entityType = new Model().AddEntityType("John Maynard"); entityType.GetOrAddProperty("PartitionKey", typeof(string), shadowProperty: true); entityType.GetOrAddProperty("RowKey", typeof(string), shadowProperty: true); _convention.Apply(entityType); var key = entityType.GetPrimaryKey(); Assert.Equal(2, key.Properties.Count); Assert.Contains("PartitionKey", key.Properties.Select(p => p.AzureTableStorage().Column)); Assert.Contains("RowKey", key.Properties.Select(p => p.AzureTableStorage().Column)); }
public void Principal_and_depedent_property_types_must_match() { var dependentType = new Model().AddEntityType("D"); var principalType = new Model().AddEntityType("P"); var dependentProperty1 = dependentType.GetOrAddProperty("P1", typeof(int), shadowProperty: true); var dependentProperty2 = dependentType.GetOrAddProperty("P2", typeof(string), shadowProperty: true); var dependentProperty3 = dependentType.GetOrAddProperty("P3", typeof(int?), shadowProperty: true); principalType.GetOrSetPrimaryKey(new[] { principalType.GetOrAddProperty("Id1", typeof(int), shadowProperty: true), principalType.GetOrAddProperty("Id2", typeof(int), shadowProperty: true) }); new ForeignKey(new[] { dependentProperty1, dependentProperty3 }, principalType.GetPrimaryKey()); Assert.Equal( Strings.ForeignKeyTypeMismatch("{'P1', 'P2'}", "D", "P"), Assert.Throws <InvalidOperationException>( () => new ForeignKey(new[] { dependentProperty1, dependentProperty2 }, principalType.GetPrimaryKey())).Message); }
public void IsRequired_and_IsUnique_null_when_dependent_property_nullable_by_default() { var entityType = new Model().AddEntityType("E"); var property = entityType.AddProperty("Id", typeof(int)); entityType.GetOrSetPrimaryKey(property); var dependentProp = entityType.AddProperty("P", typeof(int?)); var foreignKey = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey(), entityType, entityType); Assert.Null(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); Assert.Null(foreignKey.IsUnique); Assert.False(((IForeignKey)foreignKey).IsUnique); }
public void IsRequired_true_when_dependent_property_not_nullable() { var entityType = new Model().AddEntityType("E"); entityType.GetOrSetPrimaryKey(entityType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)); var dependentProp = entityType.GetOrAddProperty("P", typeof(int), shadowProperty: true); dependentProp.IsNullable = false; var foreignKey = new ForeignKey(new[] { dependentProp }, entityType.GetPrimaryKey(), entityType); Assert.Null(foreignKey.IsRequired); Assert.True(((IForeignKey)foreignKey).IsRequired); }
public virtual object GetPrimaryKey(T item) { return(Model.GetPrimaryKey(item)); }
public void Setting_IsRequired_to_false_will_set_all_FK_properties_as_nullable() { var entityType = new Model().AddEntityType("E"); entityType.GetOrSetPrimaryKey(new[] { entityType.GetOrAddProperty("Id1", typeof(int), shadowProperty: true), entityType.GetOrAddProperty("Id2", typeof(string), shadowProperty: true) }); var dependentProp1 = entityType.GetOrAddProperty("P1", typeof(int?), shadowProperty: true); var dependentProp2 = entityType.GetOrAddProperty("P2", typeof(string), shadowProperty: true); var foreignKey = new ForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.GetPrimaryKey()) { IsRequired = false }; Assert.False(foreignKey.IsRequired.Value); Assert.True(dependentProp1.IsNullable.Value); Assert.True(dependentProp2.IsNullable.Value); }
public void Principal_and_depedent_property_count_must_match() { var dependentType = new Model().AddEntityType("D"); var principalType = new Model().AddEntityType("P"); var dependentProperty1 = dependentType.GetOrAddProperty("P1", typeof(int), shadowProperty: true); var dependentProperty2 = dependentType.GetOrAddProperty("P2", typeof(int), shadowProperty: true); principalType.GetOrSetPrimaryKey(principalType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)); Assert.Equal( Strings.FormatForeignKeyCountMismatch("'P1', 'P2'", "D", "'Id'", "P"), Assert.Throws <ArgumentException>( () => new ForeignKey(new[] { dependentProperty1, dependentProperty2 }, principalType.GetPrimaryKey())).Message); }
public void Setting_IsRequired_to_false_will_set_all_FK_properties_as_nullable() { var entityType = new Model().AddEntityType("E"); var property = entityType.AddProperty("Id1", typeof(int)); var property1 = entityType.AddProperty("Id2", typeof(string)); entityType.GetOrSetPrimaryKey(new[] { property, property1 }); var dependentProp1 = entityType.AddProperty("P1", typeof(int?)); var dependentProp2 = entityType.AddProperty("P2", typeof(string)); var foreignKey = new ForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.GetPrimaryKey(), entityType, entityType) { IsRequired = false }; Assert.False(foreignKey.IsRequired.Value); Assert.True(dependentProp1.IsNullable.Value); Assert.True(dependentProp2.IsNullable.Value); }
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)); entityType.GetOrSetPrimaryKey(new[] { property, property1 }); var dependentProp1 = entityType.AddProperty("P1", typeof(int)); var dependentProp2 = entityType.AddProperty("P2", typeof(string)); var foreignKey = new ForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.GetPrimaryKey(), entityType, entityType); Assert.Null(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); }
public void Constructor_throws_when_principal_and_depedent_property_types_do_not_match() { var dependentType = new Model().AddEntityType("D"); var principalType = new Model().AddEntityType("P"); var dependentProperty1 = dependentType.AddProperty("P1", typeof(int)); var dependentProperty2 = dependentType.AddProperty("P2", typeof(string)); var property2 = principalType.AddProperty("Id1", typeof(int)); var property3 = principalType.AddProperty("Id2", typeof(int)); principalType.GetOrSetPrimaryKey(new[] { property2, property3 }); Assert.Equal( Strings.ForeignKeyTypeMismatch("{'P1', 'P2'}", "D", "P"), Assert.Throws <InvalidOperationException>( () => new ForeignKey(new[] { dependentProperty1, dependentProperty2 }, principalType.GetPrimaryKey(), principalType, dependentType)).Message); }
public void IsRequired_false_when_any_part_of_composite_FK_is_nullable() { var entityType = new Model().AddEntityType("E"); var property = entityType.AddProperty("Id1", typeof(int)); var property1 = entityType.AddProperty("Id2", typeof(string)); entityType.GetOrSetPrimaryKey(new[] { property, property1 }); var dependentProp1 = entityType.AddProperty("P1", typeof(int)); var dependentProp2 = entityType.AddProperty("P2", typeof(string)); dependentProp2.IsNullable = true; var foreignKey = new ForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.GetPrimaryKey(), entityType, entityType); Assert.False(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); dependentProp2.IsNullable = false; Assert.True(foreignKey.IsRequired); Assert.True(((IForeignKey)foreignKey).IsRequired); }
public void IsRequired_false_for_composite_FK_by_default() { var entityType = new Model().AddEntityType("E"); entityType.GetOrSetPrimaryKey(new[] { entityType.GetOrAddProperty("Id1", typeof(int), shadowProperty: true), entityType.GetOrAddProperty("Id2", typeof(string), shadowProperty: true) }); var dependentProp1 = entityType.GetOrAddProperty("P1", typeof(int), shadowProperty: true); var dependentProp2 = entityType.GetOrAddProperty("P2", typeof(string), shadowProperty: true); var foreignKey = new ForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.GetPrimaryKey()); Assert.Null(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); }
public void Constructor_throws_when_principal_and_depedent_property_types_do_not_match() { var dependentType = new Model().AddEntityType("D"); var principalType = new Model().AddEntityType("P"); var dependentProperty1 = dependentType.AddProperty("P1", typeof(int)); var dependentProperty2 = dependentType.AddProperty("P2", typeof(string)); var property2 = principalType.AddProperty("Id1", typeof(int)); var property3 = principalType.AddProperty("Id2", typeof(int)); principalType.GetOrSetPrimaryKey(new[] { property2, property3 }); Assert.Equal( CoreStrings.ForeignKeyTypeMismatch("{'P1', 'P2'}", "D", "{'Id1', 'Id2'}", "P"), Assert.Throws<InvalidOperationException>( () => new ForeignKey(new[] { dependentProperty1, dependentProperty2 }, principalType.GetPrimaryKey(), dependentType, principalType)).Message); }
public void IsRequired_false_when_any_part_of_composite_FK_is_nullable() { var entityType = new Model().AddEntityType("E"); entityType.GetOrSetPrimaryKey(new[] { entityType.GetOrAddProperty("Id1", typeof(int), shadowProperty: true), entityType.GetOrAddProperty("Id2", typeof(string), shadowProperty: true) }); var dependentProp1 = entityType.GetOrAddProperty("P1", typeof(int), shadowProperty: true); var dependentProp2 = entityType.GetOrAddProperty("P2", typeof(string), shadowProperty: true); dependentProp2.IsNullable = true; var foreignKey = new ForeignKey(new[] { dependentProp1, dependentProp2 }, entityType.GetPrimaryKey()); Assert.Null(foreignKey.IsRequired); Assert.False(((IForeignKey)foreignKey).IsRequired); dependentProp2.IsNullable = false; Assert.Null(foreignKey.IsRequired); Assert.True(((IForeignKey)foreignKey).IsRequired); }