1

VB.NET と VS2008 で部分クラスを操作する方法を学んでいます。具体的には、SqlMetal によって自動的に作成された LINQ to SQL クラスを拡張しようとしています。

自動生成されたクラスは次のようになります。

Partial Public Class DataContext
    Inherits System.Data.Linq.DataContext

 ...


<Table(Name:="dbo.Concessions")>  _
Partial Public Class Concession

 ...

     <Column(Storage:="_Country", DbType:="Char(2)")>  _
   Public Property Country() As String
          ...
    End Property

 ...

End Class

別のファイルで、私がやろうとしていることは次のとおりです。

Partial Public Class DataContext

    Partial Public Class Concession

        Public Function Foo() as String
            Return DoSomeProcessing(Me.Country)
        End Function

    End Class

End Class

...しかし、「Me.Country」とメッセージの下に青いギザギザが表示されます'Country' is not a member of 'DataContext.Concession'。部分クラスの両方の半分が同じ名前空間にあります。

では、部分クラスの半分から、自動生成された部分クラスの半分のプロパティにアクセスするにはどうすればよいでしょうか?

4

2 に答える 2

3

VB.NET が LINQ to SQL ファイルで C# から別のものを生成しない限り、DB テーブルのクラスは DataContext クラス内ではなく、そのすぐそばにあります。

したがって、部分クラスの残りの半分が実際に MyNamespace.Concession である場合、クラスMyNamespace.DataContext.Concessionがあります。

于 2008-10-25T22:35:55.627 に答える
0

(これは VB.NET に関連しています - C# プロジェクトとの違いかもしれません)

Linq-to-SQL モデル プロパティを構成して、エンティティを独自の名前空間に配置しました。

例: MyCo.MyProj.Business.Entities

次に、Linq 以外のビジネス エンティティも追加して、それらがすべて同じ名前空間にあるようにします。

ただし、上記の部分クラスの追加を試みたときに、部分クラス (つまり、自動生成された LINQ クラスではなく、生成したもの) が Linq-to-SQL モデルと同じプロジェクトにある必要があることがわかりました。それ以外の場合、クラス ビューとオブジェクト ビューアでは、2 つの別個のクラスが表示されます。同じ名前空間にあるように見えますが、実際にはそうではありません。これがバグなのか、何か間違ったことをしているのかはわかりません。

ただし、とにかく、モデルが機能するのと同じプロジェクトに部分クラス ファイルを配置します。

于 2011-03-14T04:34:48.193 に答える