成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

跨數據庫查詢語句:

  1. 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的代碼:

  1. public class BlogDbContext : DbContext  
  2. {  
  3.     public DbSet<PostText> PostTexts { get; set; }  
  4.     protected override void OnModelCreating(DbModelBuilder modelBuilder)  
  5.     {  
  6.         modelBuilder.Entity<PostText>().ToTable("blog_PostBody");  
  7.     }  

LINQ to Entities查詢代碼:

  1. using (BlogDbContext context = new BlogDbContext())  
  2. {  
  3.     (from t in context.PostTexts  
  4.         where t.ID == 3560  
  5.         select t.Text).FirstOrDefault();  

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

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

指定的表名是blog_PostBody,SQL語句中變成了[dbo].[blog_PostBody]。

2. 跨數據庫查詢:

BlogDbContext的代碼改為:

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

生成的SQL語句:

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

CNBlogsText.dbo被整個加在了中括號中,正確的應該是[CNBlogsText].[dbo].[blog_PostBody]。

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

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

生成的SQL語句:

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

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

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

原文鏈接:http://www.cnblogs.com/dudu/archive/2011/03/29/entity_framework_cross_database_query.html

【編輯推薦】

  1. 博客園現代化建設——Entity Framework
  2. 博客園現代化建設——AutoMapper

 

責任編輯:艾婧 來源: 博客園
相關推薦

2011-03-30 14:26:03

Entity Fram跨數據庫查詢

2009-12-30 09:10:04

ADO.NET Ent

2011-07-14 15:24:26

MSSQL數據庫跨數據庫查詢

2011-08-30 09:54:00

2011-05-11 13:19:42

MySQL數據庫性能優化

2025-03-04 00:08:55

C#MySQL數據庫

2022-09-08 00:13:28

云計算云數據庫數字化轉型

2019-11-21 09:00:00

數據驗證EF Core

2020-03-27 16:05:49

數據庫數據MySQL

2022-04-14 08:21:35

數據庫查詢變慢MySQL

2012-07-20 10:38:25

Entity FramEF

2020-02-19 15:01:30

數據庫SQL技術

2020-07-13 08:18:58

跨庫查詢MySQL數據庫

2011-08-09 16:08:53

數據庫連接

2020-02-25 17:04:05

數據庫云原生分布式

2023-12-13 21:56:14

云數據庫性能云架構師

2024-06-18 12:58:12

2024-01-08 08:15:57

數據庫優化內存

2020-11-10 08:38:43

數據庫HugePages內存

2021-10-22 05:52:27

數據庫調整大小容量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人免费 | 草草草网站 | 视频在线亚洲 | 亚洲最大的黄色网址 | 午夜小影院| 在线看无码的免费网站 | 免费在线成人 | 久久这里有精品 | 青娱乐一区二区 | 国产免费福利小视频 | 一区二区三区在线播放 | 亚洲一区二区三区视频 | 老司机精品福利视频 | 亚洲视频在线免费观看 | 久久99精品久久久 | 久久国产精99精产国高潮 | 看毛片网站 | 成人精品| 日韩精彩视频 | 亚洲天堂中文字幕 | 精品一区二区av | 国产男女视频 | 操操操日日日 | a中文在线视频 | 国产在线不卡 | 午夜丁香视频在线观看 | 精品一级 | 日韩在线免费视频 | 国产精品精品久久久 | 日日操操 | 亚洲第一天堂无码专区 | 国产夜恋视频在线观看 | 久久免费精品视频 | www成人免费视频 | 欧美精品二区 | 日韩电影一区二区三区 | 国产精品久久久久无码av | 免费在线成人 | 亚洲黄色在线 | 一级片av | 精品无码久久久久国产 |