Linq to sql 关于Linq到Sql中外键关系的问题

Linq to sql 关于Linq到Sql中外键关系的问题,linq-to-sql,Linq To Sql,我有很多表,其中一些表与其他表有很多关系。我注意到这些表有一个关系,我能够做到NerdDinner第1章中所示的 Dinner dinner = db.Dinners.Single(d => d.DinnerID == 1); RSVP myRSVP = new RSVP(); myRSVP.AttendeeName = "ScottGu"; dinner.RSVPs.Add(myRSVP); 所以当我尝试类似的东西时,add永远不会出现在我面前,除非它有一段关系 那么,我如何使它适用

我有很多表,其中一些表与其他表有很多关系。我注意到这些表有一个关系,我能够做到NerdDinner第1章中所示的

Dinner dinner = db.Dinners.Single(d => d.DinnerID == 1);
RSVP myRSVP = new RSVP();
myRSVP.AttendeeName = "ScottGu";

dinner.RSVPs.Add(myRSVP);
所以当我尝试类似的东西时,add永远不会出现在我面前,除非它有一段关系

那么,我如何使它适用于多个


我仍然不清楚这到底给我带来了什么。它能节省打字时间吗?还是什么?

关系中的每个表都需要一个add


Add方法将对象暂存到linqtosql数据上下文中,以便将其添加到相应的数据库表中。SubmitChanges方法保存对数据库的任何挂起的更改。因此,您可以执行所有添加,然后立即提交它们。

关系中的每个表都需要一个添加


Add方法将对象暂存到linqtosql数据上下文中,以便将其添加到相应的数据库表中。SubmitChanges方法保存对数据库的任何挂起的更改。因此,您可以执行所有添加,然后立即提交它们。

好的,让我们试着让这一点更清楚一点:以下是您在帖子中提到的基本NerdDinner模式:

您是否拥有可以添加实体的“RSVPs”样式属性(“EntitySet”)的问题并不取决于您是否拥有一个或多个关系,而是取决于您所处关系的哪一端

父表(此处:晚餐)在子表(此处:RSVP)中通常有0、1或更多子项

因此,在父表中,必须有一个属性“RSVPs”,允许您存储多个实体-一个EntitySet

但是,从子表中,子项只能与一个父项关联,因此,您只有一个名为“晚餐”的实体(此RSVP的目的地)

当您单击两个实体之间的线并查看其属性时,可以清楚地看到:

一对多的“基数”定义如下:一个父母有许多孩子,但一个孩子只有一个父母

因此,在代码中,您可以编写以下内容:

        NerdDinnerDataContext ctx = new NerdDinnerDataContext();

        Dinner upcomingDinner = new Dinner();
        upcomingDinner.EventDate = new DateTime(2009, 10, 10);
        upcomingDinner.Address = "One Microsoft Way, Redmond, WA";
        upcomingDinner.ContactPhone = "(555) 123 1234";

        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" });
        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottHa" });
        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "PhilHa" });


        RSVP scottHunter = new RSVP();
        scottHunter.AttendeeName = "Scott Hunter";
        scottHunter.Dinner = upcomingDinner;
父级(晚餐)有一个RSVP集合(确切地说,在Linq到SQL术语中是一个EntitySet),因此您可以

        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" });
另一方面,子属性“RSVP”只能与一个晚餐关联,因此它没有EntitySet,只有一个“晚餐”实例来建立连接,您将编写:

        scottHunter.Dinner = upcomingDinner;
这能让事情更清楚一点吗?这实际上是关系数据库建模的基础,以及如何将父表和子表相互关联——通过Linq转换为SQL,转换为对象,以及如何连接和关联它们


Marc

好的,让我们试着让这一点更清楚一点:这是你在帖子中提到的基本NerdDinner模式:

您是否拥有可以添加实体的“RSVPs”样式属性(“EntitySet”)的问题并不取决于您是否拥有一个或多个关系,而是取决于您所处关系的哪一端

父表(此处:晚餐)在子表(此处:RSVP)中通常有0、1或更多子项

因此,在父表中,必须有一个属性“RSVPs”,允许您存储多个实体-一个EntitySet

但是,从子表中,子项只能与一个父项关联,因此,您只有一个名为“晚餐”的实体(此RSVP的目的地)

当您单击两个实体之间的线并查看其属性时,可以清楚地看到:

一对多的“基数”定义如下:一个父母有许多孩子,但一个孩子只有一个父母

因此,在代码中,您可以编写以下内容:

        NerdDinnerDataContext ctx = new NerdDinnerDataContext();

        Dinner upcomingDinner = new Dinner();
        upcomingDinner.EventDate = new DateTime(2009, 10, 10);
        upcomingDinner.Address = "One Microsoft Way, Redmond, WA";
        upcomingDinner.ContactPhone = "(555) 123 1234";

        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" });
        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottHa" });
        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "PhilHa" });


        RSVP scottHunter = new RSVP();
        scottHunter.AttendeeName = "Scott Hunter";
        scottHunter.Dinner = upcomingDinner;
父级(晚餐)有一个RSVP集合(确切地说,在Linq到SQL术语中是一个EntitySet),因此您可以

        upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" });
另一方面,子属性“RSVP”只能与一个晚餐关联,因此它没有EntitySet,只有一个“晚餐”实例来建立连接,您将编写:

        scottHunter.Dinner = upcomingDinner;
这能让事情更清楚一点吗?这实际上是关系数据库建模的基础,以及如何将父表和子表相互关联——通过Linq转换为SQL,转换为对象,以及如何连接和关联它们


马克

你能举个例子吗。我不明白,我已经对linq做了5分钟的sql了,lol。所以我不知道如何使用这些添加方法,而且仍然没有100%清楚。你能举个例子吗。我没有跟随我一直在做sql到linq现在大约5分钟lol。所以我不知道如何使这些添加方法,仍然没有100%清楚他们。单一关系实体?不确定那是什么,但我想我有一些0.1的关系。我怎么说呢。mssql 2005中的图表只显示主键或1对多键。我想我现在得到的更多了。现在使用RSVPs,您不必添加晚餐ID。我不能100%确定最后几句台词,尤其是关于scottHunter的;。为什么你要把所有的人都变成RSVP人?或者这将创建一个晚餐对象,并添加“Scott Hunter”作为主持者,并填写其他一些字段。将“晚餐”指定给“ScottHunter”将指定此晚餐作为ScottHunter计划参加的晚餐。它将在苏格兰人和“即将到来的晚餐”之间建立一种联系。在“UpComing晚餐”中,您现在将在其“RSVPs”实体集中看到一个新的“RSVP”对象,名为ScottHunter,它已被添加到atte列表中