使用“Code First”创建外键,但实际上是DB First

时间:2016-02-19 02:14:11

标签: .net entity-framework ef-code-first entity-framework-6

我的Sql Server数据库中有这些视图:

Shipment.Shipment
     * ShipmentId --> PK
     * CourierId

Ref.Courier
     * CourierId --> PK

由于这些是视图,因此没有外键。基础表是遗留的,也没有外键。

但我想让我的实体框架模型认为有外键。 (具体为Shipment.Shipment.CourierId => Ref.Courier.CourierId

我可以先在数据库中执行此操作,但最近我切换到“代码优先”,似乎无法使用ForeignKey属性使其工作。

但是,我并没有真正做到“Code First”。我从现有数据库中的视图中改进了我的实体类。

因此,使用“代码优先”语法,如何向现有实体添加关联/外键?(即使数据库中没有关键/外键)

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

[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; }
}

1 个答案:

答案 0 :(得分:1)

将您的代码更改为

[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; }
}