使用实体框架

时间:2016-07-08 18:39:16

标签: c# sql entity-framework

目前我的数据库中有一个“Log”表。它有超过2亿行的生产。我想把这个表分成产品类型,ProdALog,ProdBLog,ProdCLog等。我希望能够创建一个新表而不必更新我的edmx并重新部署我的服务应用程序。

将日志推送到服务,然后该服务将插入到日志表

context.Logs.Add(log);
//insert 100
context.SaveChanges()
// rebuild context and loop till all logs are inserted

我希望我的服务能够基本上做到

context.Database.ExecuteSqlCommand(string.Format("INSERT INTO {0} (Source, Message) VALUES ('HERE', 'Something Happened')"), table)

在性能方面以这种方式打电话,我会失去什么吗?这是一个很好的解决'选择需要长时间'的问题(通过拆分表,产品只会查找其关联表中的日志。因此,具有最少日志的产品不会被其他产品的日志所困扰。)

我可以为每个创建的新表更新edmx,然后有一个开关

switch(type) {
  case "ProdA": context.ProdALogs.Add(new ProdALog(...)); break;
  case "ProdB": context.ProdBLogs.Add(new ProdBLog(...)); break;
  case "ProdC": context.ProdCLogs.Add(new ProdCLog(...)); break;
  default: context.Logs.Add(new Log(...)); break;
}

但这需要在每次创建/删除新表时重新发布服务

我希望能通过实体框架6以更清晰的方式做这样的事情。

其他信息

日志表是(Id,ProdId,Type,Source,Message,Dat,Tim,Level) 我有(ProdId,Dat,Tim,Level),(P​​rodId,Dat,Level),(P​​rodId)的索引 索引每晚重建。 Dat是int = 20160708 蒂姆是一个int = 81552 //(8:15:52)|| 225000(22:50:00)

我知道这不会减少日志数量,但它会“限制”每次读取时处理的日志。

实体框架6正在从请求不超过10,000个日志的网页读取日志。搜索超时是因为它们花费的时间超过60秒。

0 个答案:

没有答案