2017-12-29 18 views
0

以下のような関係を構築できますか?EF-set主キーではなく、別のテーブルで外部キーとして使用するIDを設定します。

これを行うにはどうすればよいですか?

私は親テーブル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

EF6では、代替キーを参照する外部キーはサポートされていません。 EFコアは(https://docs.microsoft.com/en-us/ef/core/modeling/alternate-keys)ですが、その他の制限があります。

しかし、このために新しい鍵を導入するのは悪い考えです。 「子」行が一緒に格納されるため、複合キーが通常はより効率的になります。

関連する問題