成人免费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-07-13 08:18:58

跨庫查詢MySQL數據庫

2020-02-19 15:01:30

數據庫SQL技術

2011-08-09 16:08:53

數據庫連接

2020-02-25 17:04:05

數據庫云原生分布式

2023-12-13 21:56:14

云數據庫性能云架構師

2024-01-08 08:15:57

數據庫優化內存

2020-11-10 08:38:43

數據庫HugePages內存

2021-10-22 05:52:27

數據庫調整大小容量

2020-08-10 09:07:00

數據庫IT技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女羞羞视频在线免费观看 | 黄色香蕉视频在线观看 | 久久精品成人 | 亚洲aⅴ精品 | 国产美女特级嫩嫩嫩bbb片 | 在线播放中文字幕 | 成年人免费网站 | 久久国产精品视频观看 | 一区二区三区视频在线观看 | 成人免费视频网站在线看 | 日本成人中文字幕 | 九九在线精品视频 | 男女视频免费 | 在线四虎 | 日韩国产欧美一区 | 久久九| 欧美精品一区二区免费 | 三区在线 | 成年人在线观看 | 久久久精彩视频 | 中文字幕在线观看一区 | 国产精品乱码一区二三区小蝌蚪 | 久久久久久免费精品一区二区三区 | 国产片侵犯亲女视频播放 | 狠狠干天天干 | 激情欧美日韩一区二区 | 奇米四色影视 | 色在线免费视频 | 91在线精品秘密一区二区 | 亚洲一区二区免费看 | 看av电影 | 国产精品久久久久久久久久久久久 | 亚洲伊人久久综合 | 国产一区二区久久 | 久久在线看 | 国产精品久久久久久久久免费 | 久久久久久一区 | 中文字幕第一页在线 | 国产一区二区三区免费 | 久久高清免费视频 | 日韩精品在线播放 |