ASP.NET MVC多对多关系(维护插入顺序)

时间:2014-05-09 14:21:47

标签: c# asp.net-mvc entity insertion

我在SQL中定义了两个表:" Inquerito"和#34; Pergunta"和第三个表" Inquerito_Pergunta"建立多对多的关系。在最后一个表中,主键既是Inquerito的主键,也是Pergunta的主键。

我应该添加尽可能多的" Perguntas"因为我想进入" Inquerito"实例。并且,保持广告订单的顺序非常重要,因此,当我向用户展示时,它会以相同的顺序显示。 A" Pergunta"也可以有多个" Inquerito",但在这种情况下,顺序并不重要。

我正在使用MVC 4实体框架,我的模型定义如下:

    public partial class Inquerito
    {
      public Inquerito()
      {
          this.Pergunta = new List<Pergunta>();
      }

      public System.Guid id { get; set; }
      public virtual ICollection<Pergunta> Pergunta { get; set; }
    }


    public partial class Pergunta
    {
      public Pergunta()
      {
        this.Inquerito = new List<Inquerito>();
      }

      public System.Guid id { get; set; }
      public virtual ICollection<Inquerito> Inquerito { get; set; }
    }

如您所见,我已将默认HashSet更改为List。

要将所有内容保存到数据库,我会这样做:

    inquerito.Pergunta.Add(pergunta);
    db.Pergunta.Add(pergunta);
    db.Inquerito.Add(inquerito);

问题是插入顺序丢失了。

添加所有&#34; Pergunta&#34;我希望我这样做:

        // Grava alterações e desconecta da base de dados.
        db.SaveChanges();

        Inquerito inquerito1 = db.Inquerito.Find(inquerito.id);
        if (inquerito1 != null)
        {
            foreach (Pergunta p in inquerito1.Pergunta.ToList())
            {
                System.Diagnostics.Debug.WriteLine("__pergunta: " + p.descricao);
            }
        }

        db = new quest_geralEntities();

        inquerito1 = db.Inquerito.Find(inquerito.id);
        if (inquerito1 != null)
        {
            foreach (Pergunta p in inquerito1.Pergunta.ToList())
            {
                System.Diagnostics.Debug.WriteLine("__pergunta: " + p.descricao);
            }
        }

所以,我第一次打印所有&#34; Pergunta&#34;与那个&#34; Inquerito&#34;相关联所有内容都以正确的顺序(插入顺序)显示,但是当我更新上下文时,使用:&#34; new quest_geralEntities()&#34;当我再次打印时,插入顺序完全丢失。

我已经在这个问题上苦苦挣扎了好几个小时了,我无法找到解决方案。我希望我已经足够明确得到帮助了。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试更改关系的属性类型:

public virtual IList<Inquerito> Inquerito { get; set; }
public virtual IList<Pergunta> Pergunta { get; set; }

您需要重新生成数据库架构。我不确定它是否适用于EF,但在NHibernate中,它可以工作。

希望它有所帮助!

答案 1 :(得分:0)

如果要维护插入顺序,我建议使用包含增量的int的字段。您可以在不将其作为主键的情况下添加int标识列,并使用该列进行排序,从而维护您的插入顺序。