2013-04-10 126 views
0

在我的演示解決方案中,我有兩個項目DataAccess和WebInterface。實體框架基礎知識

在數據訪問的項目,我有一個用戶和EF類文件UserDataAccessService.cs

代碼在UserDataAccessService.cs: -

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.Entity; 
using System.Data.EntityClient; 
using System.Data.SqlClient; 
using System.Data; 
using DataAccess.User; 

namespace DataAccess.User 
{ 

    public sealed class UserDataAccessService 
    { 

     private string efConnectionString;   
     private string portalConnectionString; 

     public string ConnectionString 
     { 
      get { return efConnectionString; } 
     } 
     public UserDataAccessService(string portalConnectionString) 
     { 
      this.portalConnectionString = portalConnectionString; 
      this.efConnectionString = GetConnectionString(portalConnectionString); 
     } 
     private string GetConnectionString(string portalConnectionString) 
     { 
      EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); 
      entityBuilder.Provider = "System.Data.SqlClient"; 
      entityBuilder.ProviderConnectionString = portalConnectionString; 
      entityBuilder.Metadata = "res://*/User.ProgramModel.csdl|res://*/User.UserModel.ssdl|res://*/User.UserModel.msl"; 
      return entityBuilder.ToString(); 
     } 
     public IEnumerable<User> GetUsers(int? userId, bool? status) 
     { 
      using (Users objectContext = new Users(efConnectionString)) 
      { 
       return objectContext.GetUsers(null, null); 
      } 
     } 
    } 
} 

現在WebInterface項目,我只是有一個ManageUsers。 ASPX頁面,在那裏我試圖通過下面的代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 
using System.Data; 
using DataAccess.User; 
namespace WebInterface 
{ 
    public partial class ManageUser : System.Web.UI.Page 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      UserDataAccessService usrObj = new UserDataAccessService(ConfigurationManager.ConnectionStrings["portalConn"].ToString()); 
      List<User> userLst = new List<User>(); 
      userLst = usrObj.GetUsers(1, null).ToList(); 
     } 
    } 
} 

問題來獲取用戶的列表: - 當我建立soluti在隨後我收到以下錯誤: -

Error 1 
The type 'System.Data.Objects.DataClasses.EntityObject' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 

D:\Practice\PTP\UI\WebInterface\User\ManageUser.aspx.cs 
18 13 
WebInterface 

要解決它,我在這已經解決了該問題WebInterface項目的參考文件夾包含它System.Data.Entity.dll。

我的問題:

如果你看看我的代碼,那麼你可以在相關的代碼EF是所有擁有所有必需的dll引用它需要與EF類的數據訪問項目。

和WebInterface項目我已經包含了DataAccess.dll和它的.aspx頁面,我只是簡單地將它調用到獲取數據。

那麼爲什麼它需要WebInterface項目中的System.Data.Entity.dll呢?

問候

Varun的

回答

0

我只有99%的把握,因爲你使用的是一些老學校EF :),你不同意的用戶類,但...我認爲這是用戶類,它是EntityFramework意識到。用戶是否從EntityObject繼承?

您可以通過將數據從實體類映射到UI類來避免這種情況。但是這需要使用EF的所有魔法。