有没有办法循环访问 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:有没有办法在不将每一行都保留在内存中的情况下循环访问表
您可以通过反射来实现这一点:
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;
}