C# 实体框架代码优先关系生成错误的sql索引代码

C# 实体框架代码优先关系生成错误的sql索引代码,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有两门课: [Table("Sales.Order")] public partial class Order { public int Id { get; set; } //conventions allow for Id property public int? ParentId { get; set; } //self referencing public virtual Order ParentOrder { get; set; } public vir

我有两门课:

[Table("Sales.Order")]
public partial class Order
{
    public int Id { get; set; } //conventions allow for Id property
    public int? ParentId { get; set; } //self referencing
    public virtual Order ParentOrder { get; set; }
    public virtual ICollection<Order> ChildOrders { get; set; }

    public byte? OrderRelationTypeId { get; set; }
}

[Table("Sales.OrderRelationType")]
public partial class OrderRelationType
{
    public OrderRelationType()
    {
        Orders = new HashSet<Order>();
    }

    public byte Id { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
}
但也有一些错误的索引创建代码

ALTER表[销售][订单]
添加约束[FK_Sales.Order_Sales.Order_ParentId]
外键([ParentId])引用[Sales]。[Order]([Id])
外键“FK_Sales.Order_Sales.Order_ParentId”引用了引用表“Sales.Order”中的无效列“Id”

ALTER表[销售][订单]
添加约束[FK_Sales.Order_Sales.OrderRelationType_OrderRelationTypeId]
外键([OrderRelationTypeId])引用[Sales]。[OrderRelationType]([Id])
外键“FK\U Sales.Order\U Sales.OrderRelationType\U OrderRelationTypeId”引用了引用表“Sales.OrderRelationType”中的无效列“Id”

因此EF正在创建正确的列名,但在索引中引用了错误的名称

我确实希望使用Id而不是OrderId作为属性名,而且就我所知,我没有做任何非法的事情。 我使用的是ef 6.1.3

生成的迁移代码:

    CreateTable(
            "Sales.Order",
            c => new
                {
                    OrderId = c.Int(nullable: false, identity: true),
                    CouponId = c.Int(),
                    ParentId = c.Int(),
                    OrderRelationTypeId = c.Byte(),
                })
            .PrimaryKey(t => t.OrderId)
            .ForeignKey("Sales.Order", t => t.ParentId)
            .ForeignKey("Sales.OrderRelationType", t => t.OrderRelationTypeId)
            .Index(t => t.ParentId)
            .Index(t => t.OrderRelationTypeId);

        CreateTable(
            "Sales.OrderRelationType",
            c => new
                {
                    OrderRelationTypeId = c.Byte(nullable: false, identity: true),
                    Name = c.String(nullable: false, maxLength: 50),
                })
            .PrimaryKey(t => t.OrderRelationTypeId);

我们可以查看生成的迁移文件吗?添加了生成的迁移代码只是为了确保-迁移使用的是
OrderId
属性。我注意到你的课很偏袒。您是否为
Order
定义了
OrderId
Id
?我只有一个Id,没有OrderId属性。但你让我思考。我从现有数据库生成了Poco代码。然后将所有EntitynameId属性更改为Id属性。已经进行了迁移,我重新运行了迁移。但是,在使用addmigrationfirstmigration之后,这并不会更新整个迁移—强制它正确地更新了迁移文件和sql
    CreateTable(
            "Sales.Order",
            c => new
                {
                    OrderId = c.Int(nullable: false, identity: true),
                    CouponId = c.Int(),
                    ParentId = c.Int(),
                    OrderRelationTypeId = c.Byte(),
                })
            .PrimaryKey(t => t.OrderId)
            .ForeignKey("Sales.Order", t => t.ParentId)
            .ForeignKey("Sales.OrderRelationType", t => t.OrderRelationTypeId)
            .Index(t => t.ParentId)
            .Index(t => t.OrderRelationTypeId);

        CreateTable(
            "Sales.OrderRelationType",
            c => new
                {
                    OrderRelationTypeId = c.Byte(nullable: false, identity: true),
                    Name = c.String(nullable: false, maxLength: 50),
                })
            .PrimaryKey(t => t.OrderRelationTypeId);