我正在使用EF代碼編寫一個測試應用程序。我在不同的層之間分發了代碼。我以爲我不得不將實體框架包安裝到數據訪問層,但我最終將安裝包(添加dll)到所有層,即UI,BLL,模型,DAL。這沒關係,或者我做錯了什麼。下面的示例代碼給你什麼,我試圖做我們是否應該將實體框架DLL添加到所有層
模型層
這層是在所有其他層參考的想法/項目
namespace Model
{
Public class Sample
{
[ForeignKey("Sample2Id")]
...
}
}
在這一層我使用,因爲數據註解的實體框架的dll像[ForeignKey..
DAL
namespace DAL
{
public class SampleContext:DbContext
{
...
}
}
在DAL我只有上下文類和遷移
BLL
namespace BLL
{
public class SampleBLL
{
public List<Sample> GetAll()
{
retrn new SampleContext().Samples().ToList()
}
}
}
如果我卸載EF爲BLL我收到以下錯誤 類型System.Data.Entity的。 DbContext在未引用的程序集中定義。
UI
namespace UI
{
public class UIHelper
{
public List<Sample> GetSamples()
{
return new SampleBLL().GetAll();
}
}
}
如果我卸載從UI的EF包我收到以下錯誤
實體框架提供程序類型 「System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'在應用程序配置文件 中註冊ADO.NET提供程序與不變名稱'System.Data.SqlClient' 可能n不被加載。確保裝配合格的名稱是用來 和大會是提供給運行的應用程序
您必須在所有圖層(引用它)中安裝EF dll。我不知道爲什麼這是必要的。我希望我們找到能解釋的人。 –