我正在学习使用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'
消息下获得了蓝色锯齿。部分类的两半都在同一名称空间中。
那么如何从我的半部分类中访问自动生成的部分类的一半属性?
答案 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模型位于同一个项目中。否则,在类视图和对象查看器中,您会看到两个单独的类 - 看似在同一个命名空间中,但不是真的。不确定这是一个错误还是我做错了。
但是,无论如何,将部分类文件放在与模型相同的项目中。