简体   繁体   中英

Mono Entity Framework 6 Duplicates

I'm using a Entity Framework 6 implementation on my Windows computer and it's working fine. In order to use on a Linux computer I tried to run the project using Mono. When the program tries to access EF6 I receive the following error:

System.InvalidOperationException: The configured column orders for the table 'Table' contains duplicates. Ensure the specified column order values are distinct.
  at System.Data.Entity.ModelConfiguration.Conventions.ColumnOrderingConventionStrict.ValidateColumns (System.Data.Entity.Core.Metadata.Edm.EntityType table, System.String tableName) [0x00000] in <filename unknown>:0
  at System.Data.Entity.ModelConfiguration.Conventions.ColumnOrderingConvention.Apply (System.Data.Entity.Core.Metadata.Edm.EntityType item, System.Data.Entity.Infrastructure.DbModel model) [0x00000] in <filename unknown>:0

I was able to find a solution. Some of my entities were using the attribute Column. In my case I was using [Column(TypeName = "Date")] . When I have removed this attribute, I was able to run the entity framework on my Linux server.

Using the EF Fluent API instead of the [Column] attribute worked for me:

modelBuilder.Entity().Property(t => t.SomeProp).HasColumnType("mytype");

I know the question is quite old, but anyways, I ended up here.

Using EF Code First, I added a column in my model and changed the table class manually.

Check if there is no duplicates. You can fix it by changing the [Column(Order = 1)] .

I got this error for Entity Framework 6 Code First for this model:

public class CycleTest
{
    [MaxLength(5)]
    [Key, Column(Order = 0)]
    public string Action { get; set; }

    [Key, Column(Order = 1)]
    public int Cycle { get; set; }

    public DateTime Created { get; set; }

    [ForeignKey("Case"), Column(Order = 0)]
    public string BusinessSystemId { get; set; }

    [ForeignKey("Case"), Column(Order = 1)]
    public int CaseId { get; set; }

    public virtual Case Case { get; set; }
}

Changed the Column values for ForeignKey properties and then everything worked. Like this:

public class CycleTest
{
    [MaxLength(5)]
    [Key, Column(Order = 0)]
    public string Action { get; set; }

    [Key, Column(Order = 1)]
    public int Cycle { get; set; }

    public DateTime Created { get; set; }

    [ForeignKey("Case"), Column(Order = 2)]
    public string BusinessSystemId { get; set; }

    [ForeignKey("Case"), Column(Order = 3)]
    public int CaseId { get; set; }

    public virtual Case Case { get; set; }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM