private static string GetAdditionalNamespaceUsings(EntityContractDeclarationModel entityContractDeclaration, string targetNamespace) { var namespaceUsings = new HashSet <string>(defaultNamespacesUsed, StringComparer.InvariantCulture); foreach (var i in entityContractDeclaration.DeclaringInterfaceType.GetInterfaces()) { if (!namespaceUsings.Contains(i.Namespace)) { namespaceUsings.Add(i.Namespace); } } foreach (var prop in entityContractDeclaration.GetProperties()) { var entityNamespace = entityContractDeclaration.EntityContractDeclarationAttribute?.Namespace ?? prop.DeclaringProperty.PropertyType.Namespace; if ((entityNamespace != targetNamespace) && !namespaceUsings.Contains(entityNamespace)) { namespaceUsings.Add(entityNamespace); } } foreach (var a in entityContractDeclaration.GetCustomAttributes()) { if (!namespaceUsings.Contains(a.AttributeType.Namespace)) { namespaceUsings.Add(a.AttributeType.Namespace); } if ((a.ConstructorArguments != null) && (a.ConstructorArguments.Count > 0)) { foreach (var ca in a.ConstructorArguments) { if (!namespaceUsings.Contains(ca.ArgumentType.Namespace)) { namespaceUsings.Add(ca.ArgumentType.Namespace); } } } } StringBuilder sb = new StringBuilder(); foreach (var ns in namespaceUsings.OrderBy(s => s, StringComparer.InvariantCulture)) { sb.Append(@" using ").Append(ns).Append(";"); } return(sb.ToString()); }