我有一个包含大约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
答案 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;
}