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



我只是在学习使用 VB.NET 和VS2008中的部分类。具体来说,我正在尝试将 LINQ 扩展到由 SqlMetal 自动创建的 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'.分部类的两半位于同一命名空间中。

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

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

所以你有类MyNamespace.DataContext.Concession,当部分类的另一半是真正的MyNamespace.Concession时。

(这与 VB.NET 有关 - 可能与 C# 项目不同)

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

例如 MyCo.MyProj.Business.Entities

然后,我也在其中添加了非 Linq 业务实体,因此它们都位于同一命名空间中。

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

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

最新更新