Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为什么我的子表实体在使用LINQ ORM映射选择对象时不显示_Database_Linq_Orm - Fatal编程技术网

Database 为什么我的子表实体在使用LINQ ORM映射选择对象时不显示

Database 为什么我的子表实体在使用LINQ ORM映射选择对象时不显示,database,linq,orm,Database,Linq,Orm,我正在尝试构造一个包含多个列表的对象。对象(消息)由一个表表示,包含的列表由每个表表示 问题是,在选择消息时,即使子表中存在值,也应该引用子表中内容的属性都具有零计数 我简化了数据库,因此我只有一个关联的子表来提供一个很好的问题示例 我所拥有的: 一个名为Messages的表包含以下属性: Id-uint-自动生成-主键 消息字符串 一个名为Recipients的表包含以下属性: MessageId-uint-主键 RecipientId-uint-主键 这两者之间有一种联系。邮件是父邮件,收件

我正在尝试构造一个包含多个列表的对象。对象(消息)由一个表表示,包含的列表由每个表表示

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

我简化了数据库,因此我只有一个关联的子表来提供一个很好的问题示例

我所拥有的:

一个名为Messages的表包含以下属性:

Id-uint-自动生成-主键 消息字符串 一个名为Recipients的表包含以下属性:

MessageId-uint-主键 RecipientId-uint-主键 这两者之间有一种联系。邮件是父邮件,收件人是子邮件。基数是一对多。参与的属性是Messages.Id->Recipients.MessageId

我的目标是能够保存邮件。每封邮件应有一个或多个收件人。当我从Messages表提取消息时,我希望通过与Recipients表的关联生成的Recipients属性将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();
}
现在,如果我从messages表中选择messages,我会找到该消息。其Recipients属性的计数为0。不知何故,与收件人的关联没有建立。所以我必须做些错事

然而,这让我很困惑——如果我从收件人表中选择收件人,我会找到具有正确MessageId和RecipientId的收件人。ORM框架还生成了一个引用父表的属性,这个属性有效!收件人实体的邮件属性实际上引用了作为其父级的邮件

为了能够列出父实体的所有子实体,有人能给我一个关于我缺少什么的提示吗?或者你还需要什么信息才能给我答案

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();
}
正如您自己发现的,自动生成的邮件类具有EntitySet类型的Recipients属性,它基本上是与该邮件关联的所有收件人


如果您将收件人添加到要保存的邮件中,LINQ将在提交更改时自动将其与正确的id密钥相关联。

这太简单了:D谢谢!