我想定义学生只能有一个课程的关系。我希望它在DB中看起来像这样:
STUDENT
ID
Name
FavoriteCourseID
COURSE
ID
Name
如何使用实体框架实现这一目标?我更愿意仅通过属性来指定它。我试过了:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public Course FavoriteCourse { get; set; }
public int? FavoriteCourseID { get; set; }
}
public class Class
{
public int ID { get; set; }
public string Name { get; set; }
}
给了我这个DB模型:
STUDENT
ID
Name
FavoriteCourseID
COURSE
ID
Name
StudentID // how to remove this?
请注意,可能会有几个学生拥有相同的喜爱课程,因此这是不可接受的解决方案。
另一个问题:这是什么类型的关系? (1:1/1:N?)
答案 0 :(得分:1)
要指定1对1关系,假设相关实体的主键与第一个实体的主键匹配。您还应该为相关实体指定 ftp_pasv($connection, true);
属性:
virtual
它将是public class Student
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public Course FavoriteCourse { get; set; }
public int? FavoriteCourseID { get; set; }
}
public class Class
{
[Key]
[ForeignKey("Student")]
public int ID { get; set; }
public string Name { get; set; }
public virtual Student Student { get; set; }
}
关系。请检查此tutorial。
如果您将one-to-zero-or-one
属性标记为FavouriteCourse
,似乎会产生强烈的一对一关系。
这将产生足够的数据库结构:
RequiredAttribute
但是,如果很多学生可以有一个喜欢的课程,这个结构将是一个问题,因为你想要一对多而不是一对一。并且您将在数据库中有重复的记录,因为一个课程只能引用一个学生。你必须考虑你的数据库设计。
答案 1 :(得分:0)
你可以试试这个:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
[ForeignKey("FavoriteCourseId")]
public Course FavoriteCourse { get; set; }
public int? FavoriteCourseId { get; set; }
}
答案 2 :(得分:0)
通常,您定义以下关系之一:
具有要求:必需不是通常的关系,插入具有这种关系的第一个条目需要特殊处理。
我想你想要的是:很多像在"每个学生都有一个喜欢的课程,但很多学生可能选择了同样喜欢的课程"。