コードファーストであるEF6を含む他の人のコードをリファクタリングしています。データベース列を再利用して複数の外部キー関係に関与させようとしています。エンティティフレームワーク:外部キーの再利用
これを行うことで、私はスキーマを非正規化していますが、そうすることで元の設計では欠落していたモデル間でより直接的な関係を作ることができます。影響を受ける手書きのsprocsとUDFが存在するため、基礎となるデータベーススキーマの変更を最小限に抑えてこれを実現したいと思います。
Frame
がFrameType
とMoulding
から構成されている:
モデルは、以下の業務の現在の状態を表します。 FrameType
またはMoulding
のペアが繰り返されないので、フレームはFrameType_Id
およびMoulding_Id
を超える複合主キーを持ちます。
public class Product
{
public int Id{get; set;}
[ForeignKey("Moulding")]
public int Moulding_Id { get; set; }
public Moulding Moulding { get; set; }
[ForeignKey("FrameType")]
public int FrameType_Id { get; set; }
public FrameType FrameType { get; set; }
}
しかし、批判的に、しません:我々は他の場所で私たちはFrameType
とMoulding
の両方を参照するProduct
を持っFrameType
とMoulding
public class FrameType
{
public int Id{get; set;}
public ICollection<Frame> Frames{get; set;}
}
public class Moulding
{
public int Id{get; set;}
public ICollection<Frame> Frames{get; set;}
}
のための最小限の実装を想定することができ
public class Frame
{
[Key,Column(Order = 0)]
[ForeignKey("Moulding")]
public int Moulding_Id { get; set; }
public Moulding Moulding { get; set; }
[Key, Column(Order = 1)]
[ForeignKey("FrameType")]
public int FrameType_Id { get; set; }
public FrameType FrameType { get; set; }
}
Frame
を直接参照してください。
私はFrame
にプロパティを追加したいと思います:
public ICollection<Product> Products{get; set;}
とProduct
上:
Moulding
と
FrameType
への外部キーとしてだけではなく
Moulding_Id
と
FrameType_Id
フィールドを再使用して
public Frame Frame{get; set;}
が、 Frame
への複合外部キーとしても使用できます。
EFでこのような外部キーの「再利用」が可能ですか?
ワンダフル。分かりやすいここに遅れているので、AMまでこれを調べる機会はありません。私はどのように乗っているかを教えてあげます。ありがとう。 – spender
治療を受けました。カスケード削除はグローバルにオフになっているので、属性設定に固執することができました。 '[foreignKey]'を 'id'プロパティからナビゲーションプロパティに移すことは、必要な洞察でした。ご協力いただきありがとうございます。 – spender