激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 使用Entity Framework(4.3.1版本)遇到的問題整理

使用Entity Framework(4.3.1版本)遇到的問題整理

2019-10-15 10:39asp.net技術網 ASP.NET教程

在這里記錄一下之前使用Entity Framework(4.3.1版本)遇到的問題:更新沒有設置主鍵的表、更改Code-First的默認連接、檢測字符串截斷錯誤,需要的朋友可以參考下

在這里記錄一下之前使用Entity Framework(4.3.1版本)遇到的問題。 
更新沒有設置主鍵的表 
在默認情況下,EF不能對一個沒有主鍵的表進行更新、插入和刪除的動作。用xml方式查看edmx文件,可以在SSDL中可以看到如下xml片斷(我定義了一個沒有主鍵的表tb_WithoutKey)。 

復制代碼代碼如下:


<EntitySet Name="tb_WithoutKey" EntityType="TransferModel.Store.tb_WithoutKey" store:Type="Tables" store:Schema="dbo" store:Name="tb_WithoutKey"> 
<DefiningQuery> 
SELECT 
[tb_WithoutKey].[ID] AS [ID], 
[tb_WithoutKey].[Name] AS [Name] 
FROM [dbo].[tb_WithoutKey] AS [tb_WithoutKey] 
</DefiningQuery> 
</EntitySet> 


我再加入一個有主鍵的表進行對比,同樣的在SSDL中,可以看到有主鍵的表的定義如下。 

復制代碼代碼如下:


<EntitySet Name="tb_WithKey" EntityType="TransferModel.Store.tb_WithKey" store:Type="Tables" Schema="dbo" /> 


我們把沒有主鍵的<EntitySet>照著上面這個節點進行更改:刪除<DefiningQuery>節點,將store:Schema=”dbo”更改為Schema=”dbo”。這樣我們就可以對之前沒有設置主鍵的表進行更新、刪除以及插入操作了。 
無主鍵的表SSDL定義其實更像是視圖,我有一點不明的是store:這個命名空間的作用是什么,為什么只是刪除<DefiningQuery>不行,還需要將Schema屬性的store命名空間刪除才可以。以上都是我還不明白的地方,只是作為一個解決方案,它確實簡單可行。 
更改Code-First的默認連接 
我們知道使用Code-First的時候我們甚至可以不用寫連接字符串,但是這個默認的連接只識別本機的SQL Express版數據庫,如果你是使用其它數據庫甚至就是Sql Server非Express版,都不行。 
在不提供任何連接數據庫信息的情況下,EF會創建一個默認的DefaultConnectionFactory,這個默認的連接工廠使用的就是SqlConnectionFactory,然后我們可以通過reflector看到它的構造函數如下。 
public SqlConnectionFactory() 

this._baseConnectionString = @"Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"; 

所以說EF默認只能連Sql Express版的數據庫。SqlConnectionFactory提供一個構造函數重載,可以指定連接字符串,修改默認的數據庫連接,我們可以在配置文件中添加以下節點進行配置。 

復制代碼代碼如下:


<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
<parameters> 
<parameter value="Data Source=heqichang-pc; Integrated Security=True; MultipleActiveResultSets=True" /> 
</parameters> 
</defaultConnectionFactory> 
</entityFramework> 


不過不管怎樣,我覺得還是指定好連接字符串來開發比較好,排除各種不可控的因素。 
檢測字符串截斷錯誤 
有時使用EF的時候會出現像以下這樣的錯誤。 
使用Entity Framework(4.3.1版本)遇到的問題整理 
產生這個錯誤的原因一般都是數據庫里設置的字段長度小于你插入的新數據的長度。但是知道原因,要知道具體是哪個字段的長度超出范圍了卻比較困難了,EF給出的信息也不明確,當然,如果數據庫中的字段少,可以很快篩選出來,但是如果表中的字段非常多,那就麻煩了。這個時候我們就可以用到SQL Server自帶的SQL Server Profiler這個工具了(Express版沒有這個工具)。 
假設我有個tb_Test表,里面有個Name字段,類型為varchar(10)。在運行我們錯誤的程序前,先開啟Profiler,選擇好你連接的數據庫開始監控。最后就可以看到我們錯誤的SQL語句了。 
使用Entity Framework(4.3.1版本)遇到的問題整理 
這個工具可以方便的監控到EF運行時對數據庫的操作,注意上圖,該工具會自動分辨出這是來自Entity Framework的請求,然后下邊是具體的SQL語句。 
以上只是我上兩周使用EF時實際遇到的問題總結,在實際中絕對不止上述我遇到的這些問題,歡迎各位園友多多提出哈!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 农村少妇吞精夜夜爽视频 | 九九热国产在线 | 国产亚洲精品成人a | 成人福利视频在线 | 天天看天天摸天天操 | 视频一区二区三区中文字幕 | 欧美大穴| 青青草免费观看 | 免费观看高清视频网站 | 国产精品伦视频看免费三 | 免费黄色在线 | 成人黄色免费 | 精品黑人一区二区三区国语馆 | 精品国产91久久久 | 亚洲国产高清自拍 | 操网| av在线日韩 | 久久久久成人精品亚洲国产 | 国产精品成aⅴ人片在线观看 | 亚洲成人午夜精品 | 一区www| 午夜天堂在线视频 | 日韩av成人 | 亚洲福利在线观看视频 | av电影免费看| 一区二区三区欧美在线 | 韩国美女一区 | 久久精品网站视频 | 久久久一区二区三区精品 | 一区二区国产在线 | 午夜精品福利在线观看 | 中国国语毛片免费观看视频 | 国产精品久久久久久影院8一贰佰 | 伊久在线 | 日日摸夜夜骑 | 国产青草视频在线观看 | 欧美成人久久 | 黄污免费网站 | 国产免费观看电影网站 | 毛片在线免费观看视频 | 国产九色在线播放九色 |