繁体   English   中英

如何在 EF6 中创建外键

[英]How do I create a Foreign Key in EF6

我定义了两个数据库类,如下所示

[Table("Warehouses")]
public class Warehouse : FullAuditedEntity, IMustHaveTenant
{
    public virtual int TenantId { get; set; }

    [Required]
    [MaxLength(255)]
    public string Name { get; set; }

    public virtual WarehouseAddress Address { get; set; }
    [ForeignKey("FKWarehouseAddressId")]
    public int AddressId { get; set; }

}

[Table("Customers")]
public class Customer : FullAuditedEntity, IMustHaveTenant
{
    public virtual int TenantId { get; set; }
    public virtual Warehouse Warehouse { get; set; }
    [ForeignKey("FK_WarehouseId")]
    public int WarehouseId { get; set; }

    [Required]
    [MaxLength(255)]
    public string CustomerName { get; set; }

    public virtual DistributionRoute DistributionRoute { get; set; }
    [ForeignKey("FKRouteId")]
    public int RouteId { get; set; }

    public virtual CustomerAddress CustomerAddress { get; set; }
    [ForeignKey("FKAddressId")]
    public int AddressId { get; set; }
}

我想要的是客户表中的每条记录都有一个 WarehouseId 列,它指的是 Warehouses 表中的 Id 列。 我不确定我哪里出错了,因为对于 DistributionRoute 表中的 RouteId 列,它工作正常。 有人可以帮忙吗。 当我尝试更新我的数据库时,出现以下错误:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Customers_Warehouses_WarehouseId”冲突。 冲突发生在数据库“StoreDb”、表“dbo.Warehouses”、“Id”列中。

你必须修复这些类,我不知道其他属性有什么用。 我只能猜测你不需要其中的一些,所以我只展示你需要在仓库和客户之间创建一对多的属性

[Table("Warehouses")]
public class Warehouse : FullAuditedEntity, IMustHaveTenant
{
    .....
     [InverseProperty(nameof(Customer.Warehouse))]
     public virtual ICollection<Customer> Customers { get; set; }
}

[Table("Customers")]
public class Customer : FullAuditedEntity, IMustHaveTenant
{

    ......
   
    public int? WarehouseId { get; set; }
    [ForeignKey(nameof(WarehouseId))]
    [InverseProperty("Customers")]
    public virtual Warehouse Warehouse { get; set; }
}

你必须清理你的班级。 仅将数据库中存在的属性添加到此属性。 在此之后,您必须进行数据库迁移。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM