System.Data.Function在此上下文中不可用,因为它是“朋友”

时间:2011-02-25 15:18:50

标签: vb.net linq

我正在尝试使用解决方案here在LINQ的DataContext中创建一个NEWID()函数,但是,当将部分类添加到我的DataContext.vb或单独的DataContextPartial.vb时,我得到了错误System.Data.Function is not available in this context because it is 'Friend'

我之前在访问数据类型时遇到过这种情况,并且很容易将其设置为Public,但我不确定function的属性可能在哪里或如何更改它们。< / p>

我在上面的链接答案中从C#转换为VB.NET:

Partial Public Class CMSModelDataContext
    <[Function](Name:="NEWID", IsComposable:=True)> _
    Public Function Random() As Guid
        Throw New NotImplementedException()
    End Function
End Class

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:1)

我不记得VB是否自动应用“属性”后缀。试试这个:

<FunctionAttribute(Name:="NEWID", IsComposable:=True)>

...并确保您拥有System.Data.Linq.Mapping的导入。

编辑:看起来VB 应用了Attribute后缀,因此我怀疑您缺少导入或引用。但是,明确指定FunctionAttribute至少会帮助您通过删除System.Data.Function的“误报”来验证这一点。

答案 1 :(得分:1)

我相信你应该

Import System.Data.Linq.Mapping

因为FunctionAttribute驻留在那里。

你没有导入名称空间,编译器去了错误的方向查找类。尝试最好并看到您已导入System.Data,编译器假定您要在System.Data.Function程序集中使用Friend这是一个内部(System.Data.dll)类,因此出错。

可以想知道这个错误消息的确切目的是什么。如果无论如何都无法访问课程,为什么还要费心去讲呢?我认为原因是你可以引用自己的程序集忘记创建一些类型Public。编译器警告你看到类但你只是不能使用它是有意义的。将相同的规则应用于所有引用(包括框架库)也是有意义的,尽管显然你不能修改其中的任何内容。

我认为FunctionAttribute不是一个特别好的名称选择,因为它要求错误的命名空间导入和相关的混淆。