private string StrongTypeDefinition(AliasedAtomMemberInfo arg) { var text = arg.Member.MemberType.Accept(new CSharpStrongTypeImplementationFinder(arg.Member)); if (text != null) { return(text); } throw new Exception($"Strong type for field {arg.Name} of type {arg.Member.MemberType} isn't available"); }
private string GetProjectionColumn(AliasedAtomMemberInfo prop) { string projectionColumn = $"[{prop.Member.Atom.Name}].{prop.Member.Name}"; if (IsReferenceToHiddenPrimaryKey(prop)) { var member = prop.Member.Reference.TargetAtomAlternateKey; projectionColumn = $"[{member.Atom.Name}].{member.Name}"; } if (prop.HasAlias) { return(projectionColumn + $"AS {prop.Name}"); } return(projectionColumn); }
public CSharpMemberNameFinder(AliasedAtomMemberInfo member) { _member = member; }
public CSharpMemberNameFinder(AtomMemberInfo member) : this(AliasedAtomMemberInfo.FromAtomMemberInfo(member)) { }
public IEnumerable <GeneratorOutput> Generate(IEnumerable <ProjectedAtomRoot> atoms) { atoms = atoms.Where(a => a.BasedOn.AdditionalInfo.ShouldGenerateCode()).ToList(); var classes = atoms.Select(GenerateClass) .ToList(); var strongTypesLookup = atoms.SelectMany(atom => atom.Members.Where(i => CanBeStronger(i.Member)).Select(j => AliasedAtomMemberInfo.FromAtomMemberInfo(GetStrongTypeMember(j.Member)))) .ToLookup(t => new CSharpStrongTypeNameFinder(t.Member).TypeName()); var strongTypes = strongTypesLookup.Select(c => StrongTypeDefinition(c.First())); string strongTypesCode = Config.Entities.StrongTypes ? string.Join(Environment.NewLine, strongTypes.IndentAllLines(1)) : string.Empty; yield return(new GeneratorOutput( Path.ChangeExtension("Records.cs", Config.FileExtension), $@" {new NamespaceGenerator().ByConfig(Config)} namespace {Config.Entities.Namespace} {{ {string.Join(Environment.NewLine, classes.IndentAllLines(1)).Trim()} {strongTypesCode} }} ".Trim())); }
private bool IsReferenceToHiddenPrimaryKey(AliasedAtomMemberInfo prop) { return(prop.Member.HasReference && prop.Member.Reference.IsReferenceToHiddenPrimaryKey); }