2011-09-06 19 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

相關問題