我有很多表,其中一些表与其他表有很多关系。我注意到有一种关系的表我可以做NerdDinner第1章中显示的那些。
Dinner dinner = db.Dinners.Single(d => d.DinnerID == 1);
RSVP myRSVP = new RSVP();
myRSVP.AttendeeName = "ScottGu";
dinner.RSVPs.Add(myRSVP);
所以,当我尝试类似的东西时,除非它有一种关系,否则永远不会出现在我面前。
那么如何让它适用于多个?
我仍然不清楚这对我有什么影响。就像打字一样省吗?或者什么?
答案 0 :(得分:4)
好的,让我们试着让它更清楚一点:这是您在帖子中提到的基本NerdDinner架构:
您是否拥有可以添加实体的“RSVP”样式属性(“EntitySet”)的问题不依赖于您是否有一个或多个关系的事实 - 这取决于你们之间关系的哪一端。
父表(此处:晚餐)在子表(此处为:RSVP)中通常包含0个,1个或多个子条目。
因此,在父表中,您必须拥有一个属性“RSVP”,允许您存储多个实体 - EntitySet 。
然而,从子表中,孩子只能与一个父母相关联 - 因此,您只有一个名为“Dinner”的实体(此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;
父(Dinner)有一组RSVP(一个EntitySet,确切地说,在Linq-to-SQL术语中),因此你可以拥有
upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" });
另一方面,子属性“RSVP”只能与一个Dinner相关联,因此它没有EntitySet,而只是一个“Dinner”的单个实例来建立连接,而你'我会写:
scottHunter.Dinner = upcomingDinner;
这会让事情变得更清晰吗?它实际上是关系数据库建模的基础知识,以及如何将父表和子表相互关联 - 由Linq-to-SQL转换为对象以及它们如何连接和关联。
马克
答案 1 :(得分:0)
您需要为关系中的每个表添加一个。
Add方法将对象分级为Linq to SQL数据上下文,以便可以将其添加到其对应的数据库表中。 SubmitChanges方法将所有挂起的更改保存到数据库。因此,您可以执行所有添加,然后立即提交。