1

私はEFを使うのは初めてですが、その概念に抵抗できず、今は行き詰まっています。紙の調査に代わるWebフォームを開発しています。データ構造には多数のルックアップテーブルがあります。EFベースのデータアクセス層(DAL)を構築しました。ルックアップテーブルに関連付けられたエンティティを渡すことができるユーザーコントロールを作成し、そのエンティティをドロップダウンリストにバインドするだけですが、これを実現するために必要なリフレクションに苦労しています。

私のコードは次のとおりです。

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

namespace ABC.ABC.Controls
{
    public partial class ABCQuestionSingle : System.Web.UI.UserControl
    {
        CareDAL.ABC.Entities DAL = new CareDAL.ABC.Entities();

        private string dataTextField;
        public string DataTextField
        {
            get { return dataTextField; }
            set { dataTextField = value; }
        }

        private string dataValueField;
        public string DataValueField
        {
            get { return dataValueField; }
            set { dataValueField = value; }
        }

        private string entityName;
        public string EntityName
        {
            get { return entityName; }
            set { entityName = value; }
        }

        //I've tried this unsuccessfully!
        public List<TEntity> GetList<TEntity>(string _name)
        {
            IEnumerable<TEntity> enumerable = (IEnumerable<TEntity>)(typeof(CareDAL.NDNQI.DST_ABCEntities).GetProperty(_name).GetValue(DAL, null));
            return enumerable.ToList();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

            ddlResponse.DataTextField = "PrimaryReason";
            ddlResponse.DataValueField = "ReasonId";
            ddlResponse.DataSource = DAL.PrimaryReasons.ToList();
            ddlResponse.DataSource = GetList(entityName); //Obvious error, but not sure how to handle this!
            ddlResponse.DataBind();
        }
    }
}

アドバイスありがとうございます!

4

1 に答える 1

1
public partial class ABCQuestionSingle : System.Web.UI.UserControl
{
    public void LoadDropDown<T>(string valueProperty, string textProperty)
        where T : class
    {
        ddlResponse.DataTextField = textProperty;
        ddlResponse.DataValueField = valueProperty;
        ddlResponse.DataSource = new CareDAL.ABC.Entities().Set<T>();
        ddlResponse.DataBind();
    }
}

次に、呼び出し元ページのロードイベント(または実際には他のイベント)からこのメソッドを呼び出すことができます。

于 2012-11-14T21:50:33.777 に答える