我正在尝试使用送货地址字段和帐单邮寄地址字段创建订单表。我认为创建一个OrderAddress模型然后将它关联两次,一个用于发货地址,另一个用于账单地址是明智的。
这就是我“想象”它的方式。
我的相应型号
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'已经存在。
我理解它的含义,所以我想将不同的名称分配给外键。这可能吗?
这里可能存在设计缺陷吗?我应该以不同的方式创建我的模型吗?
答案 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);