私はASP.NET MVCにかなり新しいですが、私はこれに対する解決策を見つけようとしましたが、同様の例は見つかりませんでした。 *でなければならないとき、私の関係はnullであるからです。 ProposalFBテーブルに、講師メール(lecEmail)と学生メール(studEmail)の複合主キーが異なるテーブル(講師と生徒)から来るようにしたい場合は、まずデータがあれば修正できると思いました講演者と学生のテーブルは残念ながらそれは動作しませんでした。私は足場しようとするたびに、私は次のようになり2つの異なるテーブルの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; }
}
本当に正しい方法を教えてくださいこの
1.複合キーは、一般的に悪い考えです。 2.外部キーで構成された複合キーは、常に*悪い考えです。 3.キー(プライマリまたは外部)は、索引付けされた列に配置する必要があります。長いと短い:あなたのテーブルにいくつかの良いアイデンティティプライマリキーを追加し、このすべての愚かさを停止します。 –
@ChrisPratt私がこれをやった理由は、 "ProposalFB"テーブルで繰り返されていない学生と講師のメールアドレスを追跡することです。これは私の提案したモデルより簡単な方法ですか? – Newbie
確かに。列にユニークな制約を追加するだけです。鍵である必要はありません。 –