我的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; }
}
答案 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; }
}