我在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;当我再次打印时,插入顺序完全丢失。
我已经在这个问题上苦苦挣扎了好几个小时了,我无法找到解决方案。我希望我已经足够明确得到帮助了。
感谢。
答案 0 :(得分:0)
您可以尝试更改关系的属性类型:
public virtual IList<Inquerito> Inquerito { get; set; }
public virtual IList<Pergunta> Pergunta { get; set; }
您需要重新生成数据库架构。我不确定它是否适用于EF,但在NHibernate中,它可以工作。
希望它有所帮助!
答案 1 :(得分:0)
如果要维护插入顺序,我建议使用包含增量的int的字段。您可以在不将其作为主键的情况下添加int标识列,并使用该列进行排序,从而维护您的插入顺序。