ASP MVC 5:表中已存在名称为“IX_Id”的索引或统计信息

时间:2014-03-09 12:40:55

标签: sql-server asp.net-mvc entity-framework ef-code-first

我正在尝试使用送货地址字段和帐单邮寄地址字段创建订单表。我认为创建一个OrderAddress模型然后将它关联两次,一个用于发货地址,另一个用于账单地址是明智的。

这就是我“想象”它的方式。

enter image description here

我的相应型号

public class Order : BaseModel
{
    public Order()
    {
        this.OrderLines = new HashSet<OrderLine>();
    }
    public DateTime OrderDate { get; set; }
    public DateTime? DueDate { get; set; }

    public decimal Total { get; set; }

    public int DistributorProfileId { get; set; }
    public virtual DistributorProfile Distributor { get; set; }
    public int BillingAddressId { get; set; }
    public virtual OrderAddress BillingAddress { get; set; }
    public int ShippingAddressId { get; set; }
    public virtual OrderAddress ShippingAddress { get; set; }
    public virtual ICollection<OrderLine> OrderLines { get; set; }
}

public class OrderAddress : BaseModel
{
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public string Country { get; set; }
    public virtual Order Order { get; set; }
}

但是,当我运行Update-Database时,我收到此错误:

  

操作失败,因为名称为“IX_Id”的索引或统计信息   表'dbo.Orders'已经存在。

我理解它的含义,所以我想将不同的名称分配给外键。这可能吗?

加成

这里可能存在设计缺陷吗?我应该以不同的方式创建我的模型吗?

1 个答案:

答案 0 :(得分:0)

I think if you can add a Key column like an Id to your Order address table:

public class OrderAddress : BaseModel
{
pulbic int Id{get;set;}
}

and using model binder

modelBuilder.Entity<Order>().HasOptional(x => x.BillingAddress).WithMany().HasForeignKey(u => u.BillingAddressId).WillCascadeOnDelete(false);

modelBuilder.Entity<Order>().HasOptional(x => x.ShippingAddress).WithMany().HasForeignKey(u => u.ShippingAddressId).WillCascadeOnDelete(false);