访问部分类的另一半的成员

时间:2008-10-25 22:32:14

标签: vb.net visual-studio-2008 linq-to-sql partial-classes sqlmetal

我正在学习使用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' 消息下获得了蓝色锯齿。部分类的两半都在同一名称空间中。

那么如何从我的半部分类中访问自动生成的部分类的一半属性?

2 个答案:

答案 0 :(得分:3)

除非VB.NET在C#的LINQ to SQL文件中生成不同的内容,否则数据库表的类不在DataContext类中,就在它旁边。

当部分类的另一半真正 MyNamespace.Concession

时,你有了 MyNamespace.DataContext.Concession 这个类

答案 1 :(得分:0)

(这与VB.NET有关 - 可能与C#项目存在差异)

我通过配置Linq-to-SQL模型属性将我的实体放在自己的命名空间中。

e.g。 MyCo.MyProj.Business.Entities

然后我在那里添加非Linq业务实体,因此它们都在同一名称空间中。

然而,当尝试进行上述部分类添加时,我发现部分类(即您生成的部分类,而不是自动生成的LINQ类)必须与Linq-to-SQL模型位于同一个项目中。否则,在类视图和对象查看器中,您会看到两个单独的类 - 看似在同一个命名空间中,但不是真的。不确定这是一个错误还是我做错了。

但是,无论如何,将部分类文件放在与模型相同的项目中。