为什么Entity Framework不能进行跨数据库查询

 我来答
蘑菇饭资讯
2014-11-17 · TA获得超过6万个赞
知道大有可为答主
回答量:1.7万
采纳率:90%
帮助的人:1.2亿
展开全部
的"CNBlogsTex.dbo.blog_PostBody"转换为"[CNBlogsText.dbo].[blog_PostBody]",从而造成不能进行跨数据库查询。

今天上午,我们通过Reflector对Entity Framework的代码进行分析,找出了真相。

真相如下:

1. 对于“CNBlogsTex.dbo.blog_PostBody"字符串,Entity Framework对其进行了拆分,拆分为:Schema名称(CNBlogsTex.dbo)与数据库表名称(blog_PostBod)。

这部分是在System.Data.Entity.ModelConfiguration.Utilities.ObjectExtensions的ParseQualifiedTableName()方法中处理的,Reflector出来的代码如下:

复制代码
public static void ParseQualifiedTableName(string qualifiedName, out string schemaName, out string tableName)
{
qualifiedName = qualifiedName.Trim();
int length = qualifiedName.LastIndexOf('.');
schemaName = null;
tableName = qualifiedName;
switch (length)
{
case -1:
break;

case 0:
throw Error.ToTable_InvalidSchemaName(qualifiedName);

default:
if (length == (tableName.Length - 1))
{
throw Error.ToTable_InvalidTableName(qualifiedName);
}
schemaName = qualifiedName.Substring(0, length);
tableName = qualifiedName.Substring(length + 1);
break;
}
if (string.IsNullOrWhiteSpace(schemaName))
{
schemaName = null;
}
}
复制代码
2. 方括号的添加(CNBlogsTex.dbo变为[CNBlogsTex.dbo],blog_PostBod变为[blog_PostBod])是在System.Data.SqlClient.SqlDdlBuilder的AppendIdentifier(string identifier)方法中处理的,Reflector出来的代码如下:

private void AppendIdentifier(string identifier)
{
this.AppendSql("[" + identifier.Replace("]", "]]") + "]");
}
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式