2

私はMVC、 を新しくしています。これは私を長い間混乱させていますが、これについて議論する質問はほとんどないようです。モデルで多対多リレーションシップを使用する方法最初のAsp.net MVC?

私はモデルを最初にASP.NET MVCでデータベースを作成しています。
私はどのプロジェクトに参加したユーザーユーザープロジェクト
手段との間のメンバー関係をしたい場合。
メンバーの関係には、追加の属性貢献度およびjoinDateが必要です。

私はこのようなモデルを作成しました。ユーザーとプロジェクトの両方

enter image description here

(中国人のため申し訳ありませんが)ナビゲーション属性メンバーを持っています。

しかし、主な問題は、使用方法がわかりません。

私は貢献JoinDate属性、 私は簡単にこれだけ(再び、申し訳ありません)のようなユーザーとプロジェクトの関係をマップすることができ必要がない場合:

enter image description here

をとこれはおそらく多分直感的に動作します

user.projects.Add(project); 

私はadditioこの関係でどのように働くかわからない。直感的ではありません。

// The user join to the project. 
Member member = new Member(user,project); // create a relationship manually 
member.contribution = 500; 
user.members.Add(member); 

各ユーザーが所有するユーザーリストとプロジェクトを返すだけでなく、

var userSet = from user in db.UserSet 
       select new 
       { 
        id = user.Id, 
        name = user.Name, 
        projectList = user.Member.Select(m => new 
        { 
         id = m.Project.Id, 
         name = m.Project.Name 
        }) 
       }; 

return Json(userSet, JsonRequestBehavior.AllowGet); 

これを改善する方法はありますか?あなたのアイデアをお伝えください。 (忍耐してくれてありがとう)

答えて

1

私たちはテストに参加したすべての人の署名を保存したいのと同じ問題に直面しました。私たちは、この小さな回避策(悪いデザインのため申し訳ありませんが、私はあなたのニーズに合うようにペイントでこれを作成した)でした:

ER-Diagram

をしても多対多の接続は、すべての「メンバー」だけ持っている1ユーザーと1がありますエントリごとのプロジェクト。 Member.Users.First().DoSomething();でアクセスします。私はこれが最もクリーンな方法ではないことを知っています。データベースアーキテクトは、これを見れば私を殺したいと思っていますが、それは機能し、手動でエントリを作成する必要はありません。

+0

うんん、申し訳ありませんが、私は本当にすべてを理解していません、より良い方法を私に示すことができますか?** User ** ** Project **への参加? –

+0

@OODWaterballあなたは理解していない部分がありますか? –

関連する問題