2013年12月2日 星期一

[Entity Framework 6] Issue (1)

.NET   Entity Framework    ORM

背景

前幾天把專案的Entity Framework升級到6.0.1後,原本run-time從其他dll注入的Connection雖然可以編譯成功,也可以建立Entity的連線,但是下Linq查詢時馬上throw 一個必須提供正確的Provider名稱的Exception 明明已經提供了System.Data.SqlClientProvider name  ( lol )

解決方式

最後,我把注入的Connection的來源專案,也另外升級到6.0.1 就成功了
(
應該版本不同,造成EF6無法辨識舊版的Connection)


另外新版的Entity Framework在建立Entity後,只會預設有一個constructor

[
你的Entity名稱].Context.cs
public XXXEntities() : base("name=XXXEntities")
{
}

所以如果要run-time丟入一個EntityConnection,必須手動加入繼承 DbContext 另外一個overloading constructor :

public XXXEntities(DbConnection existingConnection, bool contextOwnsConnection)
: base(existingConnection, contextOwnsConnection)
{}

MSDN參數定義
existingConnection
型別:System.Data.Common.DbConnection
要用於新內容的現有連接。

contextOwnsConnection
型別:System.Boolean
如果設定為 true,則處置內容時也會處置此連接,否則呼叫端必須處置此連接。


沒有留言:

張貼留言