0

私は、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

-> マークされた行が必要ですか?

恐れ入りますが、この行が私にどのような進歩をもたらすのか、私には本当にわかりません。実際、次のように Companytype のすべての会社を読み取ることができます。

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 にアクセスできないことです。

 Company.Companytype.Name

リストなしで実行すると、会社全体を会社に保存できるため、すべて正常に機能します。

Child & Parent Properties の Getter を Protected に設定して別の可能性を試してみましたが、上記の 3 行で説明したように変数にアクセスできないという論理的な問題もありました。

したがって、重要な質問は次のとおりです。これは -> List Property 必須ですか?

助けてくれてありがとう。

4

1 に答える 1

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

前述の条件は常に true になります。companiesType1正しい情報が含まれている (で更新されたcompany2) か、含まれていないかのいずれかです。

特定のタイプに属するすべての会社のリストが必要な場合は、すべての値を格納する別のクラス (例: allTheCompanies) を使用することをお勧めします。

于 2013-09-18T10:16:14.397 に答える