【问题标题】:Does a one to many relationship create a table with entity framework if the many is already a entity?如果很多已经是一个实体,一对多关系是否会创建一个带有实体框架的表?
【发布时间】:2017-01-27 22:07:29
【问题描述】:

我很想知道实体框架中的一对多关系是否会创建另一个表?或者它是如何工作的?

我有一个事件实体和一个配置文件实体。当我创建一个事件时,我会将配置文件实体添加到事件属性 RegisteredStudentIds 的列表/集合中,以显示谁已注册。

但我不想创建另一个配置文件实体表,我只想以某种方式将多个配置文件链接到那个事件。

除了我上面描述的两个表(配置文件、事件)之外,我将如何创建它以及它会在数据库中做什么?

目前在我的事件实体中,我有一个名为

的属性
public string RegisteredProfileIds { get; set; }

在这个字符串中,我有一串类似这样的配置文件 ID

“12345,23234,34345,87678”

然后我必须经历拆分、添加、删除等过程,然后在从字符串中提取 id 后查询 id,这有点乏味!我只是在寻找更好的解决方案。

【问题讨论】:

  • 多对多创建另一个表,你可以很容易地在Poco1中建立一个List的关系。但前提是您要设置 Code First。
  • @Gert 我认为 user1186050 有一个微妙的区别,因为他/她想知道他是否得到了多对多,而不是如所说的那样:'但我不想创建另一个配置文件实体表,我只想以某种方式将多个配置文件链接到那个事件。'
  • @djangojazz 我不确定。这就是为什么我没有把它当作重复的。但是描述比较模糊。我认为 OP 应该告诉他们对链接答案的看法。
  • 我正在实施一个测试,很快就会发布

标签: c# entity-framework


【解决方案1】:

如果您只想关联两个实体,其中一个可以有多个另一个实体,就像这样:

父实体:

 public class Student
 {
    public int StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public List<StudentTestScore> Scores { get; set; }
 }

子实体:

 public class StudentTestScore
 {
    public int StudentTestScoreID { get; set; }
    public int Score { get; set; }
 }

更新以插入可能的 EF 上下文:

var std = new Student { StudentID = 1, FirstName = "Brett", LastName = "X", Scores = new List<StudentTestScore>{ new Score { StudentTestScoreID = 1, Score = 100 }}}

  using (var context = new YOURContext())
  {
    context.Student.Add(std);
    context.SaveChanges();
  }

【讨论】:

  • 在这种情况下,Student 中的 Scores 属性应该是 List 还是虚拟 ICollection?
  • 我认为 EF 当您使用模型优先设计时(大屏幕显示 .edmx 文件中每个表的视觉效果。默认情况下将创建该集合类型。您可以手动覆盖这些在它们由 T4 模板(.tt 文件)创建之后。关键是你有一个将另一个对象与它相关联的“集合”类型。
  • 请澄清一下,当我使用上面的这个例子时,我在“Student”表中添加了一个“StudentTestScore”,我没有看到在数据库中创建任何列!指向“StudentTestScore”的链接在哪里创建??
  • 这是一个显示关系的简单示例,如果您要将其添加到需要上下文的数据库中。等一下,让我更新一下。
  • 这是我遇到的问题。就我而言,我有一门课,我正在向该课添加学生!当我添加第一个学生时,我看到列表为空,所以我创建了一个新实例,然后使用 .Add(Student)。到目前为止一切顺利,但后来我用第二个学生登录并将他添加到班级,但是当我到达 RegisteredStudent 属性时,它再次为空,它不显示之前添加的学生,所以我必须创建一个新的一个,然后添加新学生。没有正确保存已注册的学生!
猜你喜欢
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多