none
直接使用封裝好的Entity模型? RRS feed

  • 問題

  • 我目前使用VisualStudio2008 、 .NET Framework 3.5 、 ADO.NET Entity Framework


    假設我有多個產品推出,但底層都是一模一樣的DB建起來的EDMX
    所以我想要把EDMX提出來封裝在dll裡
    外部程式只要直接取用dll裡的EDMX就好了


    不過我封裝好後,外部建立Enties時居然出現錯誤
    發現是dll內部Edmx.designer.cs中 base("name=Entities", "Entities") 部分錯誤
    錯誤訊息為"指定的具名連接在此組態中找不到、不應使用於 EntityClient 提供者,或者無效。"


    我猜想是取不到連線字串所導致
    於是我把dll.config也加入到外層,但還是一樣
    乾脆狠一點,直接取config的Entity連線字串丟到外部專案的App.Config裡面
    但dll還是取不到..
    請問這是EntityFromwork的限制嗎??

    2011年8月18日 上午 03:18

解答

  • 您可以在建立Entity類別的物件的時候, 傳入連線資料庫的資訊, 看是否可以成功, 如果可以, 可以改由程式傳遞連線資料庫的資訊給您的DLL, 就可以解決了, 例如:

    NorthwindEntities ne=new NorthwindEntities ("連線資料庫的資訊");

    ...

    • 已標示為解答 小小郭 2011年8月18日 上午 07:49
    2011年8月18日 上午 03:49

所有回覆

  • 您可以在建立Entity類別的物件的時候, 傳入連線資料庫的資訊, 看是否可以成功, 如果可以, 可以改由程式傳遞連線資料庫的資訊給您的DLL, 就可以解決了, 例如:

    NorthwindEntities ne=new NorthwindEntities ("連線資料庫的資訊");

    ...

    • 已標示為解答 小小郭 2011年8月18日 上午 07:49
    2011年8月18日 上午 03:49
  • 我都是在要引用封裝好的EDM的dll中,加入與EDM中相同name的ConnectionStrings到config檔。

    例如我在NorthwindClass(Northwind資料庫的EDM)中使用下列連線字串來存取Northwind資料庫,

     

    <add name="NorthwindEntities" connectionString="metadata=res://*/NWModel.csdl|res://*/NWModel.ssdl|res://*/NWModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Northwind;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" />
    

     

    那就在要引用NorthwindClass的專案(以Console為例)底下的app.config加入相同連線字串:

     

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
     <connectionStrings>
      <add name="NorthwindEntities" connectionString="metadata=res://*/NWModel.csdl|res://*/NWModel.ssdl|res://*/NWModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Northwind;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
     </connectionStrings>
    </configuration>
    

     

    就可以直接用了。

     

    using (NorthwindEntities context = new NorthwindEntities())
    {
    	var q = from p in context.Regions
    		select p;
    	foreach (var item in q)
    	{
    		Console.WriteLine(item.RegionID);
    	}
    }
    

    以上提供您另一個做法,希望對你有幫助。

     

     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月18日 下午 10:52
  • 我都是在要引用封裝好的EDM的dll中,加入與EDM中相同name的ConnectionStrings到config檔。

    是的,我一開始也是這麼做,首篇有說明

    "直接取config的Entity連線字串丟到外部專案的App.Config裡面,但dll還是取不到.."

    但是this大的方法直接送連線字串是可以的。

    2011年8月19日 上午 07:05
  • 了解,看來this兄的方法比較保險。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月19日 上午 08:55
  • 我是以iis作載具的,web.confog加入相同連線字串就可以了.
    2012年3月10日 下午 03:17