是否有可能建立如下的关系?
或者最好的方法是什么?
我有一个父表SnapShotPriceList
,其中包含一个复合键(使用外键构建),它们在此表中提供了唯一的记录。
我想创建子表SnapPriceListProcess
并与父表建立关系,而不是使用这个复杂的键,而是使用一些唯一的列。这有意义吗?我可以这样做吗?添加SnapPricelistId
?
非常感谢任何提示。
[Table("SnapShotPriceList")]
public class SnapShotPriceList
{
// auton increment but not primary key
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SnapPriceListId { get; set; }
[Key, Column("ProjectId", Order = 0)]
public int ProjectId { get; set; }
[Key, Column("PriceListId", Order = 1)]
public int PriceListId { get; set; }
public int CrtUsrnm { get; set; }
public DateTime CrtTmstmp { get; set; }
[ForeignKey("PriceListId")]
public virtual PriceList PriceList { get; set; }
[ForeignKey("PriceListId, ProjectId")]
public virtual ProjectPriceList ProjectPriceList { get; set; }
public ICollection<SnapShotPriceListProcess> SnapShotPriceListProcesses { get; set; }
}
[Table("SnapPriceListProcess")]
public class SnapShotPriceListProcess
{
[Key, Column("SnapProcessId", Order = 0)]
public int SnapProcessId { get; set; }
[ForeignKey("SnapPriceListId")]
public virtual SnapShotPriceList SnapShotPriceList{ get; set; }
// some other fields
}
答案 0 :(得分:0)
EF6不支持引用备用密钥的外键。 EF Core确实(https://docs.microsoft.com/en-us/ef/core/modeling/alternate-keys)但有其他限制。
但为此引入一个新密钥通常是一个坏主意。复合键通常更有效,因为“子”行将存储在一起。