<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      真相大白:為什么Entity Framework不能進行跨數據庫查詢(附解決方法)

      上篇隨筆中,我們發現Entity Framework在構建SQL語句時,將ToTable("CNBlogsTex.dbo.blog_PostBody")中的"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("]", "]]") + "]");
      }

      所以,當我們當表名改為"CNBlogsText].[dbo.blog_PostBody"時,"CNBlogsText].[dbo"就被轉換為"[CNBlogsText]].[dbo]"。

      不僅有代碼有真相,而且有圖有真相:

      知道了真相,目前只能望真相心嘆,能不能解決這個問題還是未知數...

      更新:

      killkill的一句回復讓“心嘆”變成了“興奮”,那種程序員特有的,一般人享受不到的興奮...

      原來要欺騙的不是Entity Framework,而且是SQL Server,用SQL Server的同義詞(SYNONYM)可以輕松搞定這個問題,創建同義詞的SQL語句如下:

      CREATE SYNONYM [dbo].[CNBlogsText__blog_PostBody] FOR [CNBlogsText].[dbo].[blog_PostBody]
      非常感謝killkill的幫助!
      posted @ 2011-03-29 14:05  dudu  閱讀(19803)  評論(39)    收藏  舉報
      主站蜘蛛池模板: 久青草精品视频在线观看| 双腿张开被5个男人调教电影| 成人福利国产午夜AV免费不卡在线 | 97精品人妻系列无码人妻| 人人做人人澡人人人爽| 色婷婷综合久久久中文字幕| 精品国产一区二区三区四区| 国产不卡精品视频男人的天堂| 亚洲av成人区国产精品| 人妻另类 专区 欧美 制服| 激情伊人五月天久久综合| 日本亚洲一区二区精品久久| 国产99视频精品免费视频76| 换着玩人妻中文字幕| 国产69精品久久久久99尤物| 亚洲精品国产综合久久一线| 亚洲中文字幕日产无码成人片 | 亚洲AV日韩AV激情亚洲| 黄又色又污又爽又高潮| 国产一级小视频| 精品久久丝袜熟女一二三| 孕妇怀孕高潮潮喷视频孕妇| 日韩精品福利一区二区三区| 少妇又爽又刺激视频| 中文字幕av无码不卡| 国产超碰无码最新上传| 337p粉嫩大胆噜噜噜| 色综合人人超人人超级国碰| 亚洲av成人午夜福利| 一本久道中文无码字幕av| 敖汉旗| 亚洲综合日韩av在线| 色偷偷女人的天堂亚洲网| 久国产精品韩国三级视频| 色综合久久久久综合体桃花网| 保德县| 中文字幕国产在线精品| 久久香蕉欧美精品| 亚洲男人成人性天堂网站| 好吊视频一区二区三区人妖| 美女18禁一区二区三区视频|