public void Add(EdmEntitySet entitySet, EdmEntityType entityType) { Contract.Requires(entitySet != null); Contract.Requires(entityType != null); var i = 0; List<EdmEntityType> entityTypes; if (!_entityTypes.TryGetValue(entitySet, out entityTypes)) { entityTypes = new List<EdmEntityType>(); _entityTypes.Add(entitySet, entityTypes); } for (; i < entityTypes.Count; i++) { if (entityTypes[i] == entityType) { return; } else if (entityType.IsAncestorOf(entityTypes[i])) { break; } } entityTypes.Insert(i, entityType); }
private void MarkColumnsAsNonNullableIfNoTableSharing( EdmEntitySet entitySet, DbTableMetadata table, EdmEntityType dependentEndEntityType, IEnumerable<DbTableColumnMetadata> columns) { // determine if base entities share this table, if not, the foreign keys can be non-nullable var mappedBaseTypes = _tableMappings[table].EntityTypes.GetEntityTypes(entitySet).Where( et => et != dependentEndEntityType && (et.IsAncestorOf(dependentEndEntityType) || !dependentEndEntityType.IsAncestorOf(et))); if (mappedBaseTypes.Count() == 0 || mappedBaseTypes.All(et => et.IsAbstract)) { columns.Each(c => c.IsNullable = false); } }
public void IsAncestorOf_should_return_correct_answer() { var entityType1 = new EdmEntityType { Name = "E1" }; var entityType2 = new EdmEntityType { Name = "E2" }; entityType2.BaseType = entityType1; var entityType3 = new EdmEntityType { Name = "E3" }; entityType3.BaseType = entityType1; var entityType4 = new EdmEntityType { Name = "E4" }; entityType4.BaseType = entityType2; Assert.True(entityType1.IsAncestorOf(entityType4)); Assert.False(entityType3.IsAncestorOf(entityType4)); }