2009-02-05 30 views
1

我對大部分數據庫操作都使用Linq2Entity。但是,對於數據庫創建,表創建和初始數據插入,我使用普通的SQL文件。因此我需要一個SqlConnection和一個EntityConnection。不幸的是,實體框架開始抱怨Sql Server沒有在管道的另一端進行監聽。將SqlConnection和EntityConnection併發到本地Sql Express服務器

我不確定這裏出現了什麼問題,這可能是由於用戶實例化。清理SqlConnection的池或處理連接實例並沒有幫助。

我使用的連接字符串如下:

「數據源= \ SQLEXPRESS;初始目錄= dbname;開發集成安全性= SSPI;」

更新:

我曾嘗試使用數據庫維護目的EntityConnection,但我遇到的麻煩。我不能使用EntityConnection創建數據庫和刪除數據庫。以下語法對於EntityConnection不受支持,但對於MS SQL Express的SqlConnection可以正常工作。

CREATE DATABASE silverfit ON (NAME = silverfit, FILENAME = 'c:\silverfit\silverfit.mdf'); 

也出於某種原因,EntityConnection不允許我更改數據庫,這是刪除數據庫所必需的。恐怕我仍然需要SqlConnection來創建數據庫和表..

有沒有辦法使SqlConnections和EntityConnections共存本地ms SQL數據庫?

感謝, 沃特

回答

2

您是否嘗試過創建一個SqlConnection,然後將其傳遞給您的EntityConnection的構造函數?其中一個重載EntityConnection的需要MetadataWorkspace和的DbConnection(從哪個SqlConnection的派生的。)這樣做的小缺點是,你必須手動創建MetadataWorkspace,其中收集了.csdl,.ssdl和定義.msl文件您工作區。但是,從長遠來看,您應該能夠共享一個連接,以執行DML查詢以及使用實體框架。

+0

這實際上與我的解決方案類似,除了我讓EntityConnection構造函數創建SqlConnection並使用StoreConnection屬性檢索它。 – 2009-06-06 01:40:02

1

我不同意,你需要爲這個任務的一個普通的SQL連接和實體連接,至少你描述它。您可以使用實體連接執行SQL。看看EntityConnection.CreateDbCommand。當然,這裏存在一個危險,就是你在一個非DB服務器特定的實例(如EntityConnection)上執行特定於DB服務器的事情。但在這種情況下,它可能會打敗一個單獨的連接。

+0

是的,不幸的是我需要服務器特定的命令來創建表格等 – Wouter 2009-06-10 07:28:02

1

你嘗試使用EntityConnection.StoreConnection檢索的SqlConnection並用它執行命令?

+0

我想用SqlConnection創建數據庫和表格。如果數據庫不存在,EntityConnection不會讓我連接。 – Wouter 2009-06-10 07:40:04

0

如果你想附加數據庫文件到SQL Server Express在運行時,它好像你是,那麼只有一個連接可一次就可以打開。這是其他事情的問題,而不僅僅是你想要完成的事情。比如說,你通過VS中的服務器瀏覽器連接到'c:\ silverfit \ silverfit.mdf',然後嘗試打開db中的一個表。打開表格後,嘗試運行應用程序。它會炸彈。但是,如果打開SQL Management Studio Express(可以下載它here),然後將數據庫附加到SQL Server,則遇到的問題應該消失。此時,您應該能夠通過SQLConnection或EntityConnection打開到數據庫的多個連接。

在運行時將數據庫附加到SQL Server Express引擎確實只適用於演示目的或概念驗證。

0

ADO.NET是否通過連接池持有對數據庫開放的連接?嘗試將Pooling = False添加到連接字符串中,因爲這可能會使數據庫在放下之前關閉。

相關問題