2011-09-06 34 views
0

我想构建一个包含多个列表的对象。对象 - 消息 - 由一个表格表示,并且包含的​​列表各自由一个表格表示。为什么当我选择使用LINQ ORM映射的对象时,我的子表实体不会显示

问题是,当选择消息时,即使在子表中有值,应该引用子表中内容的属性也都有一个零计数。

我简化了数据库,这样我只有一个关联的子表提供了一个很好的例子。

我有什么:

  • 一个表称为消息,它包含以下属性:

    • 标识 - UINT - 自动生成的 - 主键
    • 消息 - 串
  • 一个名为“收件人”的表格,其中包含以下属性ES:

    • 的MessageId - UINT - 主键
    • RecipientId - UINT - 初级这两者之间键
  • 一个关联。信息是父母,收件人是孩子。基数是一对多的。参与的属性是Messages.Id - > Recipients.MessageId。

我的目标是能够保存消息。每封邮件应该有一个或多个收件人。当我从Messages表中提取邮件时,我希望收件人属性(从联系人生成的收件人表)返回所有收件人,其中MessageId等于解压缩邮件的Id。

所以,我插入到数据库:

void SendMessage(string message, uint recipient) 
{ 
    var m = new Message { Message = message }; 
    context.Messages.InsertOnSubmit(m); 
    context.SubmitChanges(); 

    var r = new Recipient { MessageId = m.Id, RecipientId = recipient }; 
    context.Recipients.InsertOnSubmit(r); 
    context.SubmitChanges(); 
} 

现在,如果我选择从消息表中的消息,我找到邮件。其收件人属性的计数= 0。不知何故与收件人的关联不是。所以我必须做一些错误的事情。

但是 - 这真让我困惑 - 如果我从收件人表中选择收件人,我会找到具有正确的MessageId和RecipientId的收件人。 ORM框架还生成了一个引用父表的属性,这个属性可以工作!收件人实体的Message属性实际引用作为其父项的Message。

任何人都可以给我一个提示,我错过了,以便能够列出父实体的所有子实体吗?或者需要更多的信息来给我一个答案?

回答

1
private void SendMessage(string message, uint recipient) 
{ 
    var message = new Message { Message = message }; 

    //no need to explicit the relation with message 
    var r = new Recipient { RecipientId = recipient }; 
    //add the recipient to message's recipients 
    message.Recipients.Add(r);  

    context.Messages.InsertOnSubmit(message); 
    //only one submit is needed 
    context.SubmitChanges(); 
} 

当你发现自己,自动生成Message类有EntitySet<Recipient>类型,这基本上是相关联的所有该消息的收件人Recipients财产。

如果您将收件人添加到您要保存的邮件中,那么在提交更改时,LINQ会自动将其与正确的ID键关联。

+0

这太简单了:D谢谢! – Bulgur

相关问题