【问题标题】:Composite primary key with two foreign keys from two different tables mvc具有来自两个不同表 mvc 的两个外键的复合主键
【发布时间】:2016-10-23 07:41:25
【问题描述】:

我对 ASP.NET MVC 还很陌生,我试图为此找到解决方案,但我找不到类似的示例,我读到这是因为我的关系必须为空 * .我希望我的 ProposalFB 表具有来自不同表(讲师和学生)的讲师电子邮件(lecEmail)和学生电子邮件(studEmail)的复合主键,起初,我想如果有数据我可以修复它不幸的是,讲师和学生桌不起作用。每当我尝试搭建脚手架时,我都会得到

我的模型如下所示: 学生.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; }
}

提案FB.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”表中重复,有没有比我提出的模型更容易管理的方法?
  • 当然。只需在列上添加唯一约束。不需要是钥匙。
  • @ChrisPratt 不是该列只有一个唯一值,但是讲师和学生电子邮件的组合不会重复,讲师电子邮件可能只映射到学生电子邮件一次,反之亦然如果这更清楚?

标签: asp.net-mvc entity-framework model-view-controller orm composite-primary-key


【解决方案1】:

您的ProposalFB 实体表示many-to-manyStudent Lecturer 之间的关系。因此StudentLecturer 不能有单个项目ProposalFB 属性,它应该是ProposalFB 的集合:

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

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

【讨论】:

  • 这按预期工作并纠正了我遇到的问题
猜你喜欢
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多