如何在C#

时间:2017-08-11 12:15:58

标签: c# entity-framework

我正在开发一个实体框架项目,我正在尝试构建一个通用结构来为我的表添加连接。

class BrowseCONTACTS_BASE : MyBrowseFrm<CONTACTS_BASE>
{
  public BrowseCONTACTS_BASE()
    {
        MyInitialize();
    }
    public void MyInitialize()
    {
        //Here I may have more joins
        MyAddJoins<ORDERS>("CONTACTS_BASE", "CB_REFNO", "ORDERS", "OR_REFNO", "OR_REFNO");
    }
}

在父类 MyBrowseFrm

 partial class MyBrowseFrm<TEntity>:Form where TEntity:class
 {
 }

我有以下内容:

MyAddJoins我从上面的子类调用的函数

protected void MyAddJoins<TTable>(string pParent, string pParentKey, string pChild, string pChildKey,
        string pDisplayField) where TTable:class, new()
    {            
       var a = new TTable();

        var item = new MyJoins<dynamic>
        {
            Parent = pParent,
            Child = pChild,
            ParentKey = pParentKey,
            ChildKey = pChildKey,
            DisplayField = pDisplayField,
            ChildTable = a
        };

        MyBdJoins.Add(item);
    }

//A list to store Joins added from the child table
private List<MyJoins<dynamic>> MyBdJoins;

protected struct MyJoins<TTable> where TTable : class
    {
        public string Parent;
        public string ParentKey;
        public string Child;
        public string ChildKey;
        public string DisplayField;
        public TTable ChildTable;
    }

好的,这是我卡住的部分,按下搜索按钮时会运行以下代码。

private void MyGenerateQuery()
    {   
        //Here I cast my Context to CONTACTS_BASE
        var loContext = (DbSet<TEntity>)Context.GetPropValue(boName);            

        foreach (var join in MyBdJoins)
        {              
            loContext
                .Join(
                    (DbSet<ORDERS>)Context.GetPropValue(join.Child),
                    par => par.GetPropValue(join.ParentKey),
                    chld => chld.GetPropValue(join.ChildKey),
                    (par, chld) => new { GetPropValue = chld.GetPropValue(join.DisplayField) }
                );
        }

        myGridView1.DataSource = loContext.ToList();
    }

以上代码所在的部分:

(DbSet<ORDERS>)Context.GetPropValue(join.Child)

我想做的是:

(DbSet<TTable>)Context.GetPropValue(join.Child)

当然,上面的代码给了我一个错误。

注意:在我的代码TEntity中是CONTACTS_BASE而TTable是ORDERS

那么如何将此对象转换为TTable类型 它在MyJoins结构中的位置

public TTable ChildTable;

修改

 public partial class ORDERS
{
    public int OR_REFNO { get; set; }
    public string OR_PROD_CODE { get; set; }
    public Nullable<DateTime> OR_DATE { get; set; }
    public Nullable<int> OR_M_REFNO { get; set; }

    public virtual CONTACTS_BASE CONTACTS_BASE { get; set; }
    public virtual ORDER_TYPES ORDER_TYPES { get; set; }
}



public partial class CONTACTS_BASE
{
    [SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public CONTACTS_BASE()
    {
        this.ORDERS = new List<ORDERS>();
    }

    public int CB_REFNO { get; set; }
    public string CB_NAME { get; set; }
    public string CB_ID_NO { get; set; }
    public string CB_AGE { get; set; }
    public Nullable<decimal> CB_TEL_NO { get; set; }
    public string CB_EMAIL { get; set; }
    public Nullable<DateTime> CB_ENROLL_DATE { get; set; }
    public Nullable<DateTime> CB_START_DATE { get; set; }
    public Nullable<DateTime> CB_END_DATE { get; set; }

    [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<ORDERS> ORDERS { get; set; }
}

0 个答案:

没有答案