请大侠帮忙EF6的问题呀!!!!!!!!!!!!

刘欣的博客 2016-04-27 03:34:39
一个小程序 WINFROMS , 安装了EF6.1.3 , 从SQLSERVER中取表数据,再从另一个系统取表数据。 然后对比更新。



我有2个问题都是性能引起的,

第一个是,我加不了db.Configuration.AutoDetectChangesEnabled = false; 参数,VS2010提示:

错误 1 “SAPsend.BODEntities”不包含“Configuration”的定义。

很奇怪。。。。

第二个就是代码,请大侠看看我这代码有什么问题,对小表没什么问题,对三万行的表做更新操作,就一直出不来。(插入正常)




try
{

// db.Configuration.AutoDetectChangesEnabled = false;
// db.Configuration.ValidateOnSaveEnabled = false;

listBox1.Items.Clear();

listBox1.Items.Add("---------------SAPsend启动: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"---------------");
listBox1.Items.Add("");

var q1 = from c in db.FAGLFLEXT select c; //取全表数据,更新模式使用
var q2 = from c in db.CE11000 select c;
var q3 = from c in db.CSKS select c;
var q4 = from c in db.KNA1 select c;
var q5 = from c in db.MAKT select c;
var q6 = from c in db.SKA1 select c;


listBox1.Items.Add("BO数据库 FAGLFLEXT表行数: " + db.FAGLFLEXT.Count().ToString());
listBox1.Items.Add("BO数据库 CE11000表行数: " + db.CE11000.Count().ToString());
listBox1.Items.Add("BO数据库 CSKS表行数: " + db.CSKS.Count().ToString());
listBox1.Items.Add("BO数据库 KNA1表行数: " + db.KNA1.Count().ToString());
listBox1.Items.Add("BO数据库 MAKT表行数: " + db.MAKT.Count().ToString());
listBox1.Items.Add("BO数据库 SKA1表行数: " + db.SKA1.Count().ToString());

listBox1.Items.Add("");

listBox1.Items.Add("取SAP数据库表开始: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//-----------取ERP-SAP数据库表--------------

//提供必要的登录参数和获得RfcDestination对象对应到SAP系统中,你要调用的fm。
RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("QAS");

//使用RfcDestination对象的repository属性创建一个IRfcFunction对象为fm提供调用
RfcRepository SapRfcRepository = SapRfcDestination.Repository;
IRfcFunction BapiGetTable = SapRfcRepository.CreateFunction("ZBI_FM001_TH");
BapiGetTable.Invoke(SapRfcDestination);

DataTable dtsap1 = gv.GetDataTableFromRFCTable(BapiGetTable.GetTable("ZBI_FAGLFLEXT"));//SAP数据表在这里
DataTable dtsap2 = gv.GetDataTableFromRFCTable(BapiGetTable.GetTable("ZBI_CE11000"));//SAP数据表在这里
DataTable dtsap3 = gv.GetDataTableFromRFCTable(BapiGetTable.GetTable("ZBI_CSKS"));//SAP数据表在这里
DataTable dtsap4 = gv.GetDataTableFromRFCTable(BapiGetTable.GetTable("ZBI_KNA1"));//SAP数据表在这里
DataTable dtsap5 = gv.GetDataTableFromRFCTable(BapiGetTable.GetTable("ZBI_MAKT"));//SAP数据表在这里
DataTable dtsap6 = gv.GetDataTableFromRFCTable(BapiGetTable.GetTable("ZBI_SKA1"));//SAP数据表在这里



listBox1.Items.Add("取SAP数据库表完成: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
listBox1.Items.Add("");
listBox1.Items.Add("SAP系统 ZBI_FAGLFLEXT表行数: " + dtsap1.Rows.Count.ToString());
listBox1.Items.Add("SAP系统 ZBI_CE11000表行数: " + dtsap2.Rows.Count.ToString());
listBox1.Items.Add("SAP系统 ZBI_CSKS表行数: " + dtsap3.Rows.Count.ToString());
listBox1.Items.Add("SAP系统 ZBI_KNA1表行数: " + dtsap4.Rows.Count.ToString());
listBox1.Items.Add("SAP系统 ZBI_MAKT表行数: " + dtsap5.Rows.Count.ToString());
listBox1.Items.Add("SAP系统 ZBI_SKA1表行数: " + dtsap6.Rows.Count.ToString());


int mod = 0, ins = 0;

//-----------ZBI_FAGLFLEXT-----1-----------------
listBox1.Items.Add("");
listBox1.Items.Add("更新开始:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
mod = 0; ins = 0;
foreach (DataRow saprow in dtsap1.Rows)
{

bool isbeen = false;
foreach (var wmsline in q1)
{

if (
(s(wmsline.RYEAR) == s(saprow["RYEAR"])) &&
(s(wmsline.DRCRK) == s(saprow["DRCRK"])) &&
(s(wmsline.OBJNR00) == s(saprow["OBJNR00"])) &&
(s(wmsline.OBJNR01) == s(saprow["OBJNR01"])) &&
(s(wmsline.OBJNR02) == s(saprow["OBJNR02"])) &&
(s(wmsline.OBJNR03) == s(saprow["OBJNR03"])) &&
(s(wmsline.OBJNR04) == s(saprow["OBJNR04"])) &&
(s(wmsline.OBJNR05) == s(saprow["OBJNR05"])) &&
(s(wmsline.OBJNR06) == s(saprow["OBJNR06"])) &&
(s(wmsline.OBJNR07) == s(saprow["OBJNR07"])) &&
(s(wmsline.OBJNR08) == s(saprow["OBJNR08"])) &&
(s(wmsline.RPMAX) == s(saprow["RPMAX"]))
)

{
wmsline.RACCT = s(saprow["RACCT"]);
wmsline.COST_ELEM = s(saprow["COST_ELEM"]);
wmsline.RBUKRS = s(saprow["RBUKRS"]);
wmsline.RCNTR = s(saprow["RCNTR"]);
wmsline.RFAREA = s(saprow["RFAREA"]);
wmsline.ZZFI001 = s(saprow["ZZFI001"]);
wmsline.ZZFI002 = s(saprow["ZZFI002"]);
wmsline.HSLVT = d(saprow["HSLVT"]);
wmsline.HSL01 = d(saprow["HSL01"]);
wmsline.HSL02 = d(saprow["HSL02"]);
wmsline.HSL03 = d(saprow["HSL03"]);
wmsline.HSL04 = d(saprow["HSL04"]);
wmsline.HSL05 = d(saprow["HSL05"]);
wmsline.HSL06 = d(saprow["HSL06"]);
wmsline.HSL07 = d(saprow["HSL07"]);
wmsline.HSL08 = d(saprow["HSL08"]);
wmsline.HSL09 = d(saprow["HSL09"]);
wmsline.HSL10 = d(saprow["HSL10"]);
wmsline.HSL11 = d(saprow["HSL11"]);
wmsline.HSL12 = d(saprow["HSL12"]);
wmsline.HSL13 = d(saprow["HSL13"]);
wmsline.HSL14 = d(saprow["HSL14"]);
wmsline.HSL15 = d(saprow["HSL15"]);
wmsline.HSL16 = d(saprow["HSL16"]);

mod++;
isbeen = true;
break;
}
}

if (!isbeen)
{
FAGLFLEXT b = new FAGLFLEXT();

b.RYEAR = s(saprow["RYEAR"]);
b.DRCRK = s(saprow["DRCRK"]);
b.RACCT = s(saprow["RACCT"]);
b.COST_ELEM = s(saprow["COST_ELEM"]);
b.RBUKRS = s(saprow["RBUKRS"]);
b.RCNTR = s(saprow["RCNTR"]);
b.RFAREA = s(saprow["RFAREA"]);
b.ZZFI001 = s(saprow["ZZFI001"]);
b.ZZFI002 = s(saprow["ZZFI002"]);
b.HSLVT = d(saprow["HSLVT"]);
b.HSL01 = d(saprow["HSL01"]);
b.HSL02 = d(saprow["HSL02"]);
b.HSL03 = d(saprow["HSL03"]);
b.HSL04 = d(saprow["HSL04"]);
b.HSL05 = d(saprow["HSL05"]);
b.HSL06 = d(saprow["HSL06"]);
b.HSL07 = d(saprow["HSL07"]);
b.HSL08 = d(saprow["HSL08"]);
b.HSL09 = d(saprow["HSL09"]);
b.HSL10 = d(saprow["HSL10"]);
b.HSL11 = d(saprow["HSL11"]);
b.HSL12 = d(saprow["HSL12"]);
b.HSL13 = d(saprow["HSL13"]);
b.HSL14 = d(saprow["HSL14"]);
b.HSL15 = d(saprow["HSL15"]);
b.HSL16 = d(saprow["HSL16"]);
b.OBJNR00 = s(saprow["OBJNR00"]);
b.OBJNR01 = s(saprow["OBJNR01"]);
b.OBJNR02 = s(saprow["OBJNR02"]);
b.OBJNR03 = s(saprow["OBJNR03"]);
b.OBJNR04 = s(saprow["OBJNR04"]);
b.OBJNR05 = s(saprow["OBJNR05"]);
b.OBJNR06 = s(saprow["OBJNR06"]);
b.OBJNR07 = s(saprow["OBJNR07"]);
b.OBJNR08 = s(saprow["OBJNR08"]);
b.RPMAX = s(saprow["RPMAX"]);

db.FAGLFLEXT.AddObject(b);
ins++;
}

}

listBox1.Items.Add("对FAGLFLEXT表修改行: " + mod.ToString());
listBox1.Items.Add("对FAGLFLEXT表插入行: " + ins.ToString());
db.SaveChanges();
listBox1.Items.Add("更新结束:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") );



...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2016-04-28
  • 打赏
  • 举报
回复
LINQ提供了延迟查询特性的...
刘欣的博客 2016-04-27
  • 打赏
  • 举报
回复
搞定了,原来linq在每一次foreach都会去数据库读一次,这还得了。 我找到了扩展库,给var加了缓存,这次不去数据库读了,几分钟搞定。。。。。 using EntityFramework.Extensions; using EntityFramework.Caching;

 var wms = from c in db.GR.FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(10))) select c;
霜寒月冷 2016-04-27
  • 打赏
  • 举报
回复
是不是Model 里面少 Configuration?

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧