我有一个名为Invoices的表,其中包含名为Vendor的列。 Vendor列是对Vendors表的FK引用,其中PK为Id。
我的dbml创建了适当的对象......发票和供应商。但是,我的Invoice对象同时具有Vendor属性(作为String)和Vendor1属性(作为Vendor对象)。
我认为这与我的列名称匹配引用的对象名称有关,但在将列更改为VendorId并重新创建所有dbml对象之后,重复的属性仍然存在。看起来像是因为列匹配对象...它创建Vendor以保存String值,然后Vendor1引用Vendor对象。为什么它不只是创建单个对象引用?
由于
答案 0 :(得分:1)
这不是一个重复的属性 - 它是两个不同的属性,用于两个不同的目的。
Vendor属性对应于数据库中列中的数据。
Vendor1属性表示外键关系,即与另一个表的连接。它被称为Vendor1,因为已经采用了Vendor这个名称(使用VendorId作为列名称是一个好主意)。除非您实际使用它,否则默认情况下不会提取Vendor1对象。拥有此属性可以更容易地制定查询,否则需要您指定连接。
这两个属性对您的对象都很有用。
要回答您更新的问题:
无论你是否使用它,Linq都必须获取供应商ID - 以防你可以使用它。由于它已被取出,因此在界面中也可以看到它很方便。如果您编写obj.Vendor1.Id而不是obj.VendorId,则会导致不必要地从数据库中提取Vendor1对象。所以也有性能影响。