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

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

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

      爆料:為什么Entity Framework不能進行跨數據庫查詢

      上篇隨筆中提到“對于跨數據庫查詢,我們沒有找到通過LINQ to Entities實現的方法”。后來仔細想想,從理論來講,實現跨數據庫查詢應該不難啊,與非跨數據庫查詢相比,只是多了個數據庫名,比如下面的非跨數據庫查詢語句:

      SELECT [Text] FROM dbo.blog_PostBody WHERE ID=3560

      跨數據庫查詢語句:

      SELECT [Text] FROM CNBlogsText.dbo.blog_PostBody WHERE ID=3560

      在Entity Framework中,我們可以通過ToTable("表名")指定表名進行映射,Entity Framework會根據指定的表名構建SQL語句,如果在這里加上數據庫名和Schema名(也就是ToTable("數據庫.dbo.表名")),是不是可以實現跨數據庫查詢呢?

      于是,我們根據這個思路進行了試驗,結果發現了Entity Framework不能進行跨數據庫查詢的秘密:Entity Framework會對ToTable()中指定的表名進行處理,加上中括號,如果沒有指定Schema名,會在表名前加上[dbo],比如:ToTable("表名"),SQL語句中的表名是[dbo].[表名]。而在加“中括號”時的不正確有處理,成為了罪魁禍首。

      我們試圖組裝一些特殊字符串騙過Entity Framework,都沒成功。目前我們在用Reflector在Entity Framework的代碼中尋找兇手,只有找到了兇手,知道了作案手段,才能知道是否有可能解決這個問題。

      下面用代碼爆一下料:

      BlogDbContext的代碼:

      public class BlogDbContext : DbContext
      {
      public DbSet<PostText> PostTexts { get; set; }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
      modelBuilder.Entity
      <PostText>().ToTable("blog_PostBody");
      }
      }

      LINQ to Entities查詢代碼:

      using (BlogDbContext context = new BlogDbContext())
      {
      (from t
      in context.PostTexts
      where t.ID == 3560
      select t.Text).FirstOrDefault();
      }

      1. 這是非跨數據庫查詢的情況,生成的SQL語句如下:

      SELECT TOP (1)
      [Extent1].[Text] AS [Text]
      FROM [dbo].[blog_PostBody] AS [Extent1]
      WHERE 3560 = [Extent1].[ID]
      指定的表名是blog_PostBody,SQL語句中變成了[dbo].[blog_PostBody]。

      2. 跨數據庫查詢:

      BlogDbContext的代碼改為:

      modelBuilder.Entity<PostText>().ToTable("CNBlogsText.dbo.blog_PostBody");

      生成的SQL語句:

      SELECT TOP (1)
      [Extent1].[Text] AS [Text]
      FROM [CNBlogsText.dbo].[blog_PostBody] AS [Extent1]
      WHERE 3560 = [Extent1].[ID]
      CNBlogsText.dbo被整個加在了中括號中,正確的應該是[CNBlogsText].[dbo].[blog_PostBody]。

      試圖欺騙一下Entity Framework,將表名改為:

      modelBuilder.Entity<PostText>().ToTable("CNBlogsText].[dbo.blog_PostBody");

      生成的SQL語句:

      SELECT TOP (1)
      [Extent1].[Text] AS [Text]
      FROM [CNBlogsText]].[dbo].[blog_PostBody] AS [Extent1]
      WHERE 3560 = [Extent1].[ID]

      多出了半個中括號,欺騙失敗...

      要想真相大白,只有找出Entity Framework中這部分處理的代碼,昨天用Reflector苦苦尋覓了一個晚上未果,今天繼續尋覓...

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

      posted @ 2011-03-29 08:43  dudu  閱讀(10810)  評論(28)    收藏  舉報
      主站蜘蛛池模板: 久热天堂在线视频精品伊人| 欧美大胆老熟妇乱子伦视频| 无码国内精品久久人妻蜜桃| av小次郎网站| 久久亚洲精品成人综合网| 久久国产免费观看精品3| 国产日韩综合av在线| 中文字幕色av一区二区三区| 国产69精品久久久久久妇女迅雷| 亚洲成人av一区免费看| 国产精品无码成人午夜电影| 欧美黑人巨大videos精品| 重口SM一区二区三区视频| 国产精品午夜福利合集| 亚洲 都市 无码 校园 激情| 变态另类视频一区二区三区| 亚洲成在人线AⅤ中文字幕| 无码国内精品人妻少妇| 国产精品无码制服丝袜| 美女一区二区三区亚洲麻豆| 国产激情艳情在线看视频| 国产精品熟女一区二区不卡| 亚洲精品成人福利网站| 日本亚洲中文字幕不卡| 少妇人妻偷人精品免费| 亚洲区中文字幕日韩精品| 乱妇乱女熟妇熟女网站| 欧洲美熟女乱av在免费| 太深太粗太爽太猛了视频| 人妻av无码系列一区二区三区| 亚洲一区二区三区蜜桃臀| 亚洲国产欧美在线人成AAAA| 潮喷无码正在播放| 男人的天堂av社区在线| 福海县| 亚洲精品乱码久久久久久中文字幕| 成人午夜激情在线观看| 丁香色婷婷国产精品视频| 免费看婬乱a欧美大片| 精品国产一区二区三区2021| 长治县|