使用 "Code First" 创建外键但实际上首先拥有数据库

Create a Foreign Key Using "Code First" but actually have the DB First

我的 Sql 服务器数据库中有这些视图:

Shipment.Shipment
     * ShipmentId --> PK
     * CourierId

Ref.Courier
     * CourierId --> PK

由于这些是视图,因此它们没有外键。基础表是旧表,也没有外键。

但我想让我的 entity framework 模型认为有外键。 (特别是Shipment.Shipment.CourierId => Ref.Courier.CourierId

我可以先在数据库中执行此操作,但我最近切换到 "code first" 并且我似乎无法使用 ForeignKey 属性让它工作。

然而,我并不是真的"Code First"。我根据现有数据库中的视图改造了我的实体 类。

那么,使用 "code first" 语法,如何向现有实体添加 association/foreign 键?(即使在数据库)

这是我现有实体的配对版本:

[Table("Shipment.Shipment")]
public partial class Shipment
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ShipmentId { get; set; }

    public int CourierId { get; set; }

    [StringLength(50)]
    public string Airbill { get; set; }
}


[Table("Ref.Courier")]
public partial class Courier
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int CourierId { get; set; }

    [StringLength(50)]
    public string CourierName { get; set; }
}

将代码更改为

[Table("Shipment.Shipment")]
public partial class Shipment
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ShipmentId { get; set; }

    public int CourierId { get; set; }

    /* this will tell EF about relationship with Courier,assuming it is 1-1 */
    public virtual Courier Courier { get; set; }

    [StringLength(50)]
    public string Airbill { get; set; }
}


[Table("Ref.Courier")]
public partial class Courier
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int CourierId { get; set; }

    [StringLength(50)]
    public string CourierName { get; set; }
}