DbContext FromSql无法替换数据库名称
我正在使用.NET核心应用程序查询一些数据。在我的应用程序中,我使用两种不同的上下文。由于LINQ/EF无法在两个上下文之间连接,因此我使用DbContext..FromSql:DbContext FromSql无法替换数据库名称,sql,asp.net-core,.net-core,dbcontext,entity-framework-core,Sql,Asp.net Core,.net Core,Dbcontext,Entity Framework Core,我正在使用.NET核心应用程序查询一些数据。在我的应用程序中,我使用两种不同的上下文。由于LINQ/EF无法在两个上下文之间连接,因此我使用DbContext..FromSql: IQueryable<Articles> query = _contextA.Articles.FromSql<Articles>( @"SELECT a.*, ra.Barcode AS RequestedBarcode FROM dbo.Articles
IQueryable<Articles> query = _contextA.Articles.FromSql<Articles>(
@"SELECT a.*, ra.Barcode AS RequestedBarcode
FROM dbo.Articles a
INNER JOIN Webservice.dbo.RequestArticle ra
ON ra.ProducerId = a.ProducerId AND ra.Barcode = a.Barcode
WHERE ra.RequestId = {0}",
ArticleRequestGuid);
这个查询非常有效。现在,我想从其他上下文中动态替换我的Webservice数据库名称
IQueryable<Articles> query = _contextA.Articles.FromSql<Articles>(
@"SELECT a.*, ra.Barcode AS RequestedBarcode
FROM dbo.Articles a
INNER JOIN {1}.dbo.RequestArticle ra
ON ra.ProducerId = a.ProducerId AND ra.Barcode = a.Barcode
WHERE ra.RequestId = {0}",
ArticleRequestGuid,
_contextB.Database.GetDbConnection().Database);
_contextB.Database.GetDbConnection.Database中的值是完全正确的值字符串。但查询仍然失败,并显示以下错误消息:
"message": "Falsche Syntax in der Nähe von '.'.",
"detail": "
at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__107_0(Task`1 result)\r\n
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()\r\n
at System.Threading.Tasks.Task.Execute()\r\n
--- End of stack trace from previous location where exception was thrown ---\r\n
“Nähe von.”中的Falsche语法。表示接近“”的语法错误
做错了什么
更新:
前面的例子是用Core1.1完成的。现在我已经更新到Core2.0
这很好:
IQueryable<Articles> query = _contextA.Articles.FromSql<Articles>(
@"SELECT a.*, ra.Barcode AS RequestedBarcode
FROM dbo.Articles a
INNER JOIN Webservice.dbo.RequestArticle ra
ON ra.ProducerId = a.ProducerId AND ra.Barcode = a.Barcode
WHERE ra.RequestId = {ArticleRequestGuid}");
这不起作用:
string webserviceDatabaseName = "Webservice";
IQueryable<Articles> query = _contextA.Articles.FromSql<Articles>(
@"SELECT a.*, ra.Barcode AS RequestedBarcode
FROM dbo.Articles a
INNER JOIN {webserviceDatabaseName}.dbo.RequestArticle ra
ON ra.ProducerId = a.ProducerId AND ra.Barcode = a.Barcode
WHERE ra.RequestId = {ArticleRequestGuid}");
这似乎行不通。由于问题还有待解决,我在SQL语句中直接使用了String.Format而不是变量名:
string sqlQuery = String.Format(
@"SELECT a.*, ra.Barcode AS RequestedBarcode
FROM dbo.Articles a
INNER JOIN {0}.dbo.RequestArticle ra
ON ra.ProducerId = a.ProducerId AND ra.Barcode = a.Barcode
WHERE ra.RequestId = '{1}'",
_contextB.Database.GetDbConnection().Database,
ArticleRequestGuid
);
var query = _contextA.Articles.FromSql<Articles>(sqlQuery);
不知何故,第一种变体根本不起作用。似乎在这个问题上投入更多的精力是不值得的。我想尝试两种方法。首先定义一个helpvariable并在其中捕获_contextB.Database.GetDbConnection.Database;然后在.FromSql语句中使用此帮助变量。如果这不起作用,我还会尝试将{1}和{0}的当前顺序更改为顺序{0}和{1}。我使用一个帮助变量作为数据库名称,{0}和{1}的顺序是相反的。我只是复制了第一个代码块,并手动将其更改为第二个代码块,以突出显示更改并缩短问题。您使用的是哪个版本的EF Core?1.0。并计划下周推出2.0。请在1:17:30左右观看视频中有关EF Core 2.0的片段。如果它不能同时使用两个参数而不是一个参数,他们就不会证明这一点。也许您应该在EF Core 2.0中重试。