我正在使用 LINQ 调用名为“GetTabMenuTheme”的函数,我将其拖动到数据库模型中以生成如下函数:

[Function(Name="dbo.GetTabMenuTheme", IsComposable=true)]
public string GetTabMenuTheme([Parameter(DbType="NVarChar(MAX)")] string state)
{
    return ((string)(this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), state).ReturnValue));
}

并像这样使用它:

from mi in db.ModuleInstances
select db.GetTabMenuTheme(mi.State)

我的连接是:

Data Source=MyServer;Initial Catalog=MyDB;uid=MyUser;pwd=MyPassword

在本地执行代码没有问题(我的意思是连接:Data Source=.;Initial Catalog=MyDB;Integrated Security=True;),但是当我在 web 中部署时,会产生此错误:

找不到列“ DBO”或用户定义的函数或汇总的“ dbo.getTabMenutheme”,否则名称是模棱两可的。

有帮助吗?

解决方案

评论后编辑:您可以回退到非LINQ数据库交互:

var com = db.Connection.CreateCommand();
com.CommandText = "select MyUser.GetTabMenuTheme(@state);";
com.Parameters.Add(new SqlParameter("@state", state));
var result = (string) com.ExecuteScalar();

这允许您选择模式,它是代码示例中的MyUser。

我已经搜索了一种动态更改LINQ模式名称的方法,并且这篇博文完全描述了它。

  

嗯,它并不像接缝那么容易   因为表名存储在一个   部分类的属性   由LINQ to SQL设计器生成   而微软并没有提供一种方法或   在运行时更改它的方法。

然后,博主描述了一种解决方案,您可以在运行时加载指定架构的XML。它看起来非常复杂和缓慢;我会选择更简单的非LINQ选项。

scroll top