|
分類:[データベース全般]
C#, Visual Studio 2013 Commnunity Update4, EF6.0
お世話になります。
Entityframework のデータベースの設計についてご相談したいと思い投稿させて頂きました。
現在、 CSV からデータを読み込み Entityframewrok のモデルへとインポートするということをしています。
CSV の種類と項目は下記のような感じです。
【発注元CSV】
発注元コード, 発注元名
100, A社
101, B社
102, C社
【納品先CSV】
納品先コード, 納品先名, 発注元コード, 発注元名
1, 東京, 100, A社
2, 千葉, 100, A社
3, 神奈川, 100, A社
1, 東京, 101, B社
2, 神奈川, 101, B社
3, 長野, 101, B社
1, 東京, 102, C社
2, 北海道, 102, C社
【オーダーCSV】
オーダーNo, オーダー詳細No, 発注元コード, 発注元名, 納品先コード, 納品先名
10001, 1, 100, A社, 1, 東京
10001, 2, 100, A社, 2, 千葉
10002, 1, 101, B社, 1, 東京
10003, 1, 102, C者, 2, 北海道
10004, 1, 100, A社, 0, (空文字)
上記の CSV のインポート先に下記のようなモデルを使っています。
class 発注元
{
[Key]
public int コード {get; set;}
public string 名前 {get; set;}
public virtual ICollection<納品先> 納品先s {get ;set;}
}
class 納品先
{
[Key, Column(Order = 0)]
public int コード {get; set;}
[Key, Column(Order = 0)]
public int 発注元コード {get; set;}
public string 名前 {get; set;}
[ForeignKey("発注元コード")]
public virtual 発注元 発注元 {get ;set;}
public virtual ICollection<オーダー> オーダーs {get; set;}
}
class オーダー
{
[Key, Column(Order=0)]
public int オーダーNo {get; set;}
[Key, Column(Order=1)]
public int オーダー詳細No {get; set;}
[ForeignKey("納品先"), Column(Order=2)]
public int 発注元コード {get; set;}
[ForeignKey("納品先"), Column(Order=3)]
public int 納品先コード { get; set;}
public virtual 納品先 納品先 {get; set;}
}
処理的には、オーダー CSV から発注元コードと納品先コードの組み合わせを全て抽出し、
発注元モデルと納品先モデルへと登録後、
改めて、オーダー CSV の発注元名と納品先名を除いた No とコードを上記のモデルに入れています。
理想的には、下記のようなオーダーモデルに入れて、
class オーダー
{
[Key, Column(Order=0)]
public int オーダーNo {get; set;}
[Key, Column(Order=1)]
public int オーダー詳細No {get; set;}
public virtual 発注元 発注元 {get; set;}
public virtual 納品先 納品先 {get; set;}
}
オーダーからの発注元と納品先の情報の取得を分かりやすくしたいのですが、
発注元はともかく納品先が複合キーになっているので、出来ない状態です。
なにか Fluent API 等で対処できるといいなと思って探っている状態なのですが・・・
もっと良いモデルの設計や、Fulent API の設定等で何かあれば、ご助言を頂けると幸いです。
宜しくお願い致します。
|