实体框架代码第一关系生成错误的sql索引代码

时间:2016-03-07 23:18:54

标签: 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 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; }
}

和一些流利的api:

modelBuilder.Entity<Order>()
.HasMany(e => e.ChildOrders)
.WithOptional(e => e.ParentOrder)
.HasForeignKey(e => e.ParentId);

生成迁移+ db更新后 sql有正确的表:

CREATE TABLE [Sales].[Order] (
    [OrderId] [int] NOT NULL IDENTITY,
    [ParentId] [int],
    [OrderRelationTypeId] [tinyint],
    CONSTRAINT [PK_Sales.Order] PRIMARY KEY ([OrderId])
)

CREATE TABLE [Sales].[OrderRelationType] (
    [OrderRelationTypeId] [tinyint] NOT NULL IDENTITY,
    [Name] [nvarchar](50) NOT NULL,
    CONSTRAINT [PK_Sales.OrderRelationType] PRIMARY KEY ([OrderRelationTypeId])
)

但也有一些错误的索引创建代码

ALTER TABLE [Sales].[Order] 
ADD CONSTRAINT [FK_Sales.Order_Sales.Order_ParentId] 
FOREIGN KEY ([ParentId]) REFERENCES [Sales].[Order] ([Id])
  

外键'FK_Sales.Order_Sales.Order_ParentId'引用引用表'Sales.Order'中的无效列'Id'。

ALTER TABLE [Sales].[Order] 
ADD CONSTRAINT [FK_Sales.Order_Sales.OrderRelationType_OrderRelationTypeId] 
FOREIGN KEY ([OrderRelationTypeId]) REFERENCES [Sales].[OrderRelationType] ([Id])
  

外键'FK_Sales.Order_Sales.OrderRelationType_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);

0 个答案:

没有答案