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);