/// <summary> /// Constructs an initializer for a unique index. /// </summary> /// <param name="uniqueElement">The unique index description.</param> /// <returns>Code to initialize a unique index.</returns> private static ExpressionSyntax GetUniqueInitializer(UniqueElement uniqueElement) { // new ForeignIndex<Account,Item>("AccountSymbolKey") ExpressionSyntax expressionSyntax = SyntaxFactory.ObjectCreationExpression( SyntaxFactory.GenericName( SyntaxFactory.Identifier("UniqueIndex")) .WithTypeArgumentList( SyntaxFactory.TypeArgumentList( SyntaxFactory.SingletonSeparatedList <TypeSyntax>( SyntaxFactory.IdentifierName(uniqueElement.Table.Name))))) .WithArgumentList( SyntaxFactory.ArgumentList( SyntaxFactory.SingletonSeparatedList <ArgumentSyntax>( SyntaxFactory.Argument( SyntaxFactory.LiteralExpression( SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(uniqueElement.Name)))))); // .HasIndex(a => a.ItemId) expressionSyntax = SyntaxFactory.InvocationExpression( SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, expressionSyntax, SyntaxFactory.IdentifierName("HasIndex"))) .WithArgumentList( SyntaxFactory.ArgumentList( SyntaxFactory.SingletonSeparatedList <ArgumentSyntax>( SyntaxFactory.Argument(UniqueKeyExpression.GetUniqueKey(uniqueElement))))); // .HasFilter(a => a.Symbol != null) if (uniqueElement.IsNullable) { expressionSyntax = SyntaxFactory.InvocationExpression( SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, expressionSyntax, SyntaxFactory.IdentifierName("HasFilter"))) .WithArgumentList( SyntaxFactory.ArgumentList( SyntaxFactory.SingletonSeparatedList <ArgumentSyntax>( SyntaxFactory.Argument(NullableKeyFilterExpression.GetNullableKeyFilter(uniqueElement))))); } return(expressionSyntax); }
/// <summary> /// Constructs an initializer for a unique index. /// </summary> /// <param name="foreignKeyElement">The foreign index description.</param> /// <returns>Code to initialize a unique index.</returns> private static ExpressionSyntax GetForeignKeyInitializer(ForeignElement foreignKeyElement) { // new ForeignIndex<Account,Item>("AccountSymbolKey") ExpressionSyntax expressionSyntax = SyntaxFactory.ObjectCreationExpression( SyntaxFactory.GenericName( SyntaxFactory.Identifier("ForeignIndex")) .WithTypeArgumentList( SyntaxFactory.TypeArgumentList( SyntaxFactory.SeparatedList <TypeSyntax>( new SyntaxNodeOrToken[] { SyntaxFactory.IdentifierName(foreignKeyElement.UniqueKey.Table.Name), SyntaxFactory.Token(SyntaxKind.CommaToken), SyntaxFactory.IdentifierName(foreignKeyElement.Table.Name), })))) .WithArgumentList( SyntaxFactory.ArgumentList( SyntaxFactory.SeparatedList <ArgumentSyntax>( new SyntaxNodeOrToken[] { SyntaxFactory.Argument( SyntaxFactory.LiteralExpression( SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(foreignKeyElement.Name))), SyntaxFactory.Token(SyntaxKind.CommaToken), SyntaxFactory.Argument( SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.ThisExpression(), SyntaxFactory.IdentifierName(foreignKeyElement.XmlSchemaDocument.Name)), SyntaxFactory.IdentifierName(foreignKeyElement.UniqueKey.Table.Name.ToPlural())), SyntaxFactory.IdentifierName(foreignKeyElement.UniqueKey.Name))), }))); // .HasIndex(a => a.ItemId) expressionSyntax = SyntaxFactory.InvocationExpression( SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, expressionSyntax, SyntaxFactory.IdentifierName("HasIndex"))) .WithArgumentList( SyntaxFactory.ArgumentList( SyntaxFactory.SingletonSeparatedList <ArgumentSyntax>( SyntaxFactory.Argument( ForeignKeyExpression.GetForeignKey(foreignKeyElement))))); // .HasFilter(a => a.Symbol != null) if (foreignKeyElement.IsNullable) { expressionSyntax = SyntaxFactory.InvocationExpression( SyntaxFactory.MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, expressionSyntax, SyntaxFactory.IdentifierName("HasFilter"))) .WithArgumentList( SyntaxFactory.ArgumentList( SyntaxFactory.SingletonSeparatedList <ArgumentSyntax>( SyntaxFactory.Argument(NullableKeyFilterExpression.GetNullableKeyFilter(foreignKeyElement))))); } // = new UniqueIndex("SecurityFigiKey").HasIndex(s => s.Figi).HasFilter(s => s.Figi != null); return(expressionSyntax); }