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");
        }
示例#2
0
        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()));
        }
示例#6
0
 private bool IsReferenceToHiddenPrimaryKey(AliasedAtomMemberInfo prop)
 {
     return(prop.Member.HasReference && prop.Member.Reference.IsReferenceToHiddenPrimaryKey);
 }