有没有办法迭代EF6实体?

时间:2016-01-26 17:31:05

标签: c# entity-framework-6

我有一个包含大约50个字段的Web表单,用于Oracle DB上的crud操作,我正在使用EF6。 目前,我完成了这样做:

SPWeb web = site.OpenWeb()
SPFolder folder = web.Folders["ListURL"];
folder.MoveTo("NewURL");
folder.Update();

其中GENERIC_FTP_SEND是Model.context.cs中虚拟DbSet的名称。

这样可以正常工作,但至少不可重复使用。我想要完成的是有一些代码允许我遍历ftpPartner的属性并将它们与匹配的字段id进行比较。像这样:

private GENERIC_FTP_SEND GetFields()
{
    GENERIC_FTP_SEND ftpPartner = new GENERIC_FTP_SEND();

    //Contact Info
    ftpPartner.FTP_LOOKUP_ID = FTP_LOOKUP_IDTB.Text;
    ftpPartner.PARTNER_NAME = PARTNER_NAMETB.Text;
    ftpPartner.REMEDY_QUEUE = REMEDY_QUEUETB.Text;
    ftpPartner.PRIORITY = PRIORITYBtns.SelectedValue;
    ftpPartner.CONTACT_EMAIL = CONTACT_EMAILTB.Text;
    ftpPartner.CONTACT_NAME = CONTACT_NAMETB.Text;
    ftpPartner.CONTACT_PHONE = CONTACT_PHONETB.Text;
    ...
}

如果你需要/想要在这里看到它是我的Model.context.cs

var n =0;
foreach (Control cntrl in ControlList){
    if(cntrl.ID == ftpPartner[n]){
         ftpPartner[n] = cntrl.Text;
    }
    n++;
}

我在这里看到了这个问题,但我不知道如何在我的情况下实现这个问题。 Entity Framework 6: is there a way to iterate through a table without holding each row in memory

2 个答案:

答案 0 :(得分:2)

你可以通过反思实现这一点:

var type = typeof(GENERIC_FTP_SEND);
foreach (Control cntrl in ControlList){
    Object value = null;


    if (cntrl is TextBox){
         value = (cntrl as TextBox).Text;
    } else if (cntrl is GroupBox){
         value = (cntrl as GroupBox).SelectedValue;
    } //etc ...



    PropertyInfo pInfo = type.GetProperty(cntrl.ID);
    if (pInfo != null && value != null){
        pInfo.SetValue(ftpPartner, value, null);
    }
}

答案 1 :(得分:0)

如果您知道要插入,也可以使用Entity Framework上下文对象来完成相同的操作。

var x = new GENERIC_FTP_SEND();

//  Add it to your context immediately
ctx.GENERIC_FTP_SEND.Add(x);

//  Then something along these lines 
foreach (Control cntrl in ControlList)
{
    ctx.Entry(x).Property(cntrl.Name).CurrentValue = ctrl.Text;
}