有没有办法循环访问 EF6 实体

本文关键字:EF6 实体 访问 循环 有没有 | 更新日期: 2023-09-27 18:31:54

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

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;
    ...
}

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

这工作正常,但至少不可重用。我想完成的是有一些代码,允许我循环访问ftpPartner的属性,并将它们与匹配的字段ID进行比较。像这样:

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

如果您需要/想在这里看到它是我的模型上下文.cs

public partial class Entities : DbContext{
public Entities(): base("name=Entities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}
public virtual DbSet<GENERIC_FTP_SEND> GENERIC_FTP_SEND { get; set; }
}

在这里看到了这个问题,但我不确定如何在我的情况下实现它。实体框架 6:有没有办法在不将每一行都保留在内存中的情况下循环访问表

有没有办法循环访问 EF6 实体

您可以通过反射来实现这一点:

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);
    }
}

如果您知道要插入,还可以使用实体框架上下文对象来完成相同的操作。

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;
}