我正在开发一个包含EF5,Vb.net,AJAX(Javascript),ASMX-Webservices和HTML的项目。
我的问题是,如果我有(示例类):
Public Class Company
Public Property CompanyId As Integer
Public Property Name As String
Public Overridable Property Companytype As Companytype
End Class
和班级:
Public Class Companytype
Public Property CompanytypeId As Integer
Public Property Name As String
-> Public Overridable Property Companies As List(Of Company)
End Class
我需要 - >标记线?
我很害怕,但我真的不知道这条线给我带来了哪些进展。 实际上,我可以阅读所有类似公司类型的公司:
Public Shared Function PostCompanyTypeCompanies() As List(Of Company)
Dim db As New Context
Dim x As Integer = 1
Dim y = (From c In db.Companies Where c.CompanyType.CompanyTypeId = x Select New With _
{c.Name, _
c.CompanyType})
Dim z As List(Of Company) = y.AsEnumerable() _
.Select(Function(t) New Company With _
{.Name = t.Name, _
.CompanyType = t.CompanyType}).ToList()
Return z
End Function
这与'x'只是一个例子,我可以将CompanytypeId传递给函数。 列表的问题是,当我想要获得新公司的Companytypes并且我无法访问公司的公司类型时,我总是得到循环引用:
Company.Companytype.Name
当我没有列表时,一切正常,因为我可以将整个Companytpe存储到公司。
我尝试了另一种可能性,设置了儿童的吸气器。父属性受保护然后问题在逻辑上也是我无法访问变量,因为我描述了上面的3行。
所以重要的问题是:这是 - >列出属性是否必须?
谢谢你的帮助。
答案 0 :(得分:0)
do I need the -> marked line?
没有。它是冗余信息(没有实际用途),可能会引起一致性错误。例如:
Dim company1 As New Company()
Dim listCompanies As New List(Of Company)()
Dim companiesType1 As New Companytype()
listCompanies.Add(company1)
With companiesType1
.CompanytypeId = 1
.Name = "Type 1"
.Companies = listCompanies
End With
With company1
.CompanyId = 1
.Name = "1"
.Companytype = companiesType1
End With
上面的代码定义了Company1
和相关的类型(companiesType1
...虽然我们有“首先是鸡蛋或鸡肉”的问题,但是首先想到了为什么选择的方法是错误的)。如果您创建一个相同类型的新公司:
Dim company2 As New Company()
With company2
.CompanyId = 2
.Name = "2"
.Companytype = companiesType1
End With
您必须重新定义companiesType1
(更新其Companies
属性),以保持一致性。但是,就这是多余的信息而言,Companytype
将根据这一事实“独立完成”:
If (company2.Companytype Is company1.Companytype) Then
'Both companies have the same type
End If
上述条件始终为真:如果companiesType1
包含正确的信息(已使用company2
更新),或者不是。
如果您需要列出属于某种类型的所有公司,您最好依赖存储所有值的其他类(例如allTheCompanies
)。