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'。部分类的两半都在相同的名称空间中。

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

回答

3

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

所以,你必须在类MyNamespace.DataContext.Concession在部分班级的另一半是真的MyNamespace.Concession

+0

就是这样!感谢指针。 – 2008-10-25 22:49:17

0

(这关系到VB.NET - 可能是用C#项目的差异)

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

例如MyCo.MyProj.Business.Entities

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

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

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