1

私はASP.NET MVCにかなり新しいですが、私はこれに対する解決策を見つけようとしましたが、同様の例は見つかりませんでした。 *でなければならないとき、私の関係はnullであるからです。 ProposalFBテーブルに、講師メール(lecEmail)と学生メール(studEmail)の複合主キーが異なるテーブル(講師と生徒)から来るようにしたい場合は、まずデータがあれば修正できると思いました講演者と学生のテーブルは残念ながらそれは動作しませんでした。私は足場しようとするたびに、私は次のようになりenter image description here2つの異なるテーブルの2つの外部キーを持つコンポジットプライマリキーmvc

マイモデル を得る: Student.cs

public class Student 
{ 
    [Key] 
    public string studEmail { get; set; } 
    public string projectType { get; set; } 
    public string projectTitle { get; set; } 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public Nullable<System.DateTime> year { get; set; } 
    public virtual ProposalFB ProposalFB { get; set; } 
} 

Lecturer.cs

public class Lecturer 
{ 
    [Key] 
    public string lecEmail { get; set; } 
    public virtual ProposalFB ProposalFB { get; set; } 
} 

ProposalFB.cs

public class ProposalFB 
{ 
    [Key, ForeignKey("Student"), Column(Order = 0)] 
    public string studEmail { get; set; } 
    [Key, ForeignKey("Lecturer"), Column(Order = 1)] 
    public string lecEmail { get; set; } 
    public string feedback1 { get; set; } 
    public string feedback2 { get; set; } 
    public string feedback3 { get; set; } 
    public string feedback4 { get; set; } 
    public string feedback5 { get; set; } 
    public float proposalMark { get; set; } 
    public Nullable<System.DateTime> createdOn { get; set; } 
    public Nullable<System.DateTime> modified { get; set; } 
    public bool status { get; set; } 
    public virtual Student Student { get; set; } 
    public virtual Lecturer Lecturer { get; set; } 
} 

本当に正しい方法を教えてくださいこの

+2

1.複合キーは、一般的に悪い考えです。 2.外部キーで構成された複合キーは、常に*悪い考えです。 3.キー(プライマリまたは外部)は、索引付けされた列に配置する必要があります。長いと短い:あなたのテーブルにいくつかの良いアイデンティティプライマリキーを追加し、このすべての愚かさを停止します。 –

+0

@ChrisPratt私がこれをやった理由は、 "ProposalFB"テーブルで繰り返されていない学生と講師のメールアドレスを追跡することです。これは私の提案したモデルより簡単な方法ですか? – Newbie

+0

確かに。列にユニークな制約を追加するだけです。鍵である必要はありません。 –

答えて

1

あなたのProposalFBエンティティは、Student Lecturerの間のmany-to-manyの関係を表します。したがってStudentLecturer単一の項目にProposalFB性質を持つことはできません、それはProposalFBのコレクションである必要があります。

public class Student 
{ 
    // ... 
    public virtual ICollection<ProposalFB> ProposalFB { get; set; } 
} 

public class Lecturer 
{ 
    // ... 
    public virtual ICollection<ProposalFB> ProposalFB { get; set; } 
} 
+0

これは予想どおりに機能し、私が持っていた問題を修正しました – Newbie

関連する問題