实体框架基础知识

时间:2013-04-10 10:10:39

标签: c# .net entity-framework

在我的演示解决方案中,我有两个项目DataAccess和WebInterface。

在DataAccess项目中,我有一个EF for Users和一个类文件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

要解决此问题,我已将System.Data.Entity.dll包含在WebInterface项目的参考文件夹中,该文件修复了该问题。

我的问题:

如果您查看我的代码,那么您可以在DataAccess项目中使用与代码相关的EF,其中包含与EF相关的类所需的所有dll引用。

并且在WebInterface项目中我已经包含了DataAccess.dll,并且在它.aspx页面中,我只是将其作为获取数据的函数。

那为什么它也需要WebInterface项目中的System.Data.Entity.dll?

此致

Varun的

1 个答案:

答案 0 :(得分:0)

我只有99%肯定因为你正在使用一些旧学校EF :)并且你没有共享User类但是...我认为它是EntityFramework意识到的User类。用户是否继承自EntityObject?

您可以通过将数据从实体类映射到UI类来避免这种情况。但这需要使用EF的所有魔力。