使用linq2sql的关系/外键?

时间:2009-08-22 13:15:56

标签: sql-server linq linq-to-sql foreign-keys entity-relationship

有人可以帮忙吗?

我在我的预订(prim键)和保险(用于键)表之间创建了一个关系,并导入到linq2sql并检查了我自动创建的c#文件,确定我有预订.MyFieldNames等等PLUS reservation.Insurance是我的关系但保留。保险我看不到保险的字段名 - 我错过了什么?

我是否必须拨打GetInsurances或其他什么?我没有看到任何东西..事实上,保险属于Linq.entityset ???

此外,我希望创建我的预订表(这很好,很容易)然后自动“注入”一个保险(即1对多)来自Ilist或其他..

这是不可能的,

任何帮助真的很感激

P.S。我确实通过T4工具箱创建了我自动创建的c#dto文件,但这不应该有任何区别。我只为每个实体都有一个单独的文件..

1 个答案:

答案 0 :(得分:4)

不是100%肯定你的意思是“我什么也看不见”。

假设你有一个Reservations表和一个引用“预订”的Insurance表 - 这是什么关系? 1:1? 1:很多?哪个方向?你可以发布你的DBML设计师表面的截图吗? (将其上传到www.tinypic.com并在您的问题中将链接作为图像包含在内)?

“预订”类将包含“保险”(EntityRef<Insurance>)的一个实例或“保险”对象(EntitySet<Insurance>)的列表(实体集) - 具体取决于关系的性质 - 你应该能够在代码中导航那些,例如

string foo =  myReservation.Insurance.CustomerName; // or whatever 

你不会在设计师的表面上看到那些 - 这只是你设计界面上另一个类的链接,对吗?

相反,相反 - 如果保险只与一个保留相关联,您应该能够(在代码中)做:

 string bar = myInsuranceObject.Reservation.MyFieldName1; // or whatever

所以我不太清楚你真正指的是哪种情况 - 你能详细说明你的问题并使其更清楚吗?

根据NerdDinner sample,我会详细说明。查看DBML设计界面:

alt text

在这里,您没有看到任何用于在对象之间来回移动的属性。但是你确实看到“RSVP”类有一个“DinnerID”外键,它将它链接到“Dinner”类。所以这是一个1:n的关系:一个晚餐有RSVP,每个RSVP只有一个晚餐。

在您的代码中,您现在可以看到这些创建的属性 - 首先查看RSVP类:

alt text

您可以看到RSVP类有一个EntityRef<Dinner> - 一个参考(链接)到一个Dinner - 这个RSVP的晚餐。

另一方面,Dinner班级列出了所有计划参加晚宴的极客的RSVP!

alt text

因此,在Dinner课程中,您有一个EntitySet<RSVP> - 一个完整的与会者列表,您可以在使用Dinner课程时进行导航。

这会让事情变得更清楚吗?

马克