1

私のデモ ソリューションには、DataAccess と WebInterface の 2 つのプロジェクトがあります。

DataAccess プロジェクトには、ユーザー用の 1 つの 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();
        }
    }
}

問題:- ソリューションを構築しているときに、以下のエラーが発生します:-

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に関連するコードはすべてDataAccessプロジェクトにあり、EFに関連するクラスに必要なすべてのdll参照が含まれていることがわかります。

WebInterface プロジェクトには DataAccess.dll が含まれており、その .aspx ページでは、データをフェッチする関数を呼び出すだけです。

では、なぜ WebInterface プロジェクトでも System.Data.Entity.dll が必要なのですか?

よろしく

ヴァルン

4

1 に答える 1

0

古い学校の EF を使用している原因は 99% だけだと確信しています:)そして User クラスを共有していませんでしたが... EntityFramework を認識しているのは User クラスだと思います。User が EntityObject を継承しているということでしょうか。

これは、エンティティ クラスから UI クラスにデータをマッピングすることで回避できます。しかし、それは EF を使用することからすべての魔法を奪います。

于 2013-04-10T19:07:20.030 に答える