Skip to content

CLI model generation issues with Index attribute #6

@mangelito

Description

@mangelito

This what is generated by create-models:

    [Type(DatabaseType.MySQL, "mediumint", false)]
    [Column("RakenskapsarFK")]
    public virtual int RakenskapsarFK { get; set; }

    [Index("RakenskapsarFK_Kontonummer", IndexCharacteristic.Unique, IndexType.BTREE)]
    [Type(DatabaseType.MySQL, "smallint", false)]
    [Column("Kontonummer")]
    public virtual int Kontonummer { get; set; }

The actual database index is on both RakenskapsarFK and Kontonummer, but the Index attribute only appears on the Kontonummer column.

You can try to manually "correct" it, though I'm not sure this is correct:

    [Index("RakenskapsarFK_Kontonummer", IndexCharacteristic.Unique, IndexType.BTREE, nameof(RakenskapsarFK), nameof(Kontonummer))]
    [Type(DatabaseType.MySQL, "mediumint", false)]
    [Column("RakenskapsarFK")]
    public virtual int RakenskapsarFK { get; set; }

    [Index("RakenskapsarFK_Kontonummer", IndexCharacteristic.Unique, IndexType.BTREE, nameof(RakenskapsarFK), nameof(Kontonummer))]
    [Type(DatabaseType.MySQL, "smallint", false)]
    [Column("Kontonummer")]
    public virtual int Kontonummer { get; set; }

But if you do this model generation fails with the following call stack:

Unhandled exception. System.InvalidOperationException: Sequence contains no matching element
   at System.Linq.ThrowHelper.ThrowNoMatchException()
   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
   at DataLinq.Metadata.MetadataFactory.<>c__DisplayClass0_0.<ParseIndices>b__4(String colName) in D:\git\DataLinq\src\DataLinq\Metadata\MetadataFactory.cs:line 44
   at System.Linq.Enumerable.SelectArrayIterator`2.Fill(ReadOnlySpan`1 source, Span`1 destination, Func`2 func)
   at System.Linq.Enumerable.SelectArrayIterator`2.ToList()
   at DataLinq.Metadata.MetadataFactory.ParseIndices(DatabaseMetadata database) in D:\git\DataLinq\src\DataLinq\Metadata\MetadataFactory.cs:line 43
   at DataLinq.Metadata.MetadataFromFileFactory.ReadFiles(String csType, IEnumerable`1 srcPaths) in D:\git\DataLinq\src\DataLinq.Tools\MetadataFromFileFactory.cs:line 130
   at DataLinq.Tools.ModelGenerator.CreateModels(DataLinqDatabaseConnection connection, String basePath, String databaseName) in D:\git\DataLinq\src\DataLinq.Tools\ModelGenerator.cs:line 136
   at DataLinq.CLI.Program.<>c.<Main>b__12_2(CreateModelsOptions options) in D:\git\DataLinq\src\DataLinq.CLI\Program.cs:line 155
   at CommandLine.ParserResultExtensions.WithParsed[T](ParserResult`1 result, Action`1 action)
   at DataLinq.CLI.Program.Main(String[] args) in D:\git\DataLinq\src\DataLinq.CLI\Program.cs:line 88

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions