我将使用实体框架代码第一种方法,并且发现只搜索350条记录的查询大约需要8秒。我怎样才能加快速度呢?这个Universe或实体框架是否很慢?
实体框架5.0 U2.Data.Client 1.2.1 .Net Framework 4.5.1
RAMContext看起来像这样:
public class RAMContext : DbContext
{
public RAMContext() { }
public DbSet<Policy> Policies { get; set; }
}
以下是获取实体的代码:
List<Policy> policies = null;
Database.SetInitializer<RAMContext>(null);
using (RAMContext context = new RAMContext())
{
policies = (from p in context.Policies
where p.AGENT_NO == id
select p).ToList();
}
这是连接字符串:
<add name="RAMContext" connectionString="Database=<account>;UserID=<userid>;Password=<pwd>;Server=<server>;Pooling=false;ServerType=universe;ConnectTimeout=360;SleepAfterClose=300;PersistSecurityInfo=true" providerName="U2.Data.Client" />
AGENT_NO被编入索引,并且从TCL直接在数据库上运行的查询几乎立即完成。
EDITED 在Rajan的评论之后我尝试了以下内容:
policies = (from p in context.Policies
where p.AGENT_NO == id
select new PolicyModel
{
//Type = PolicyModel.Types)StringValue.GetEnumValueByStringValue(typeof(PolicyModel.Types), p.TYPE),
Insured = p.INSURED,
City = p.CITY,
State = p.STATE,
CancelDate = p.CANC_DT
//IsNew = PickHelper.PickYNNullToBool(p.NEW_RENEW_FLG)
});
我现在可以在3秒内完成此选择。我还在AGENT_NO上重建了索引,我相信这有很大帮助。
尝试你的第二个建议我得到以下例外:
类型&#39; System.IndexOutOfRangeException&#39;的例外情况发生在U2.Data.Client.dll但未在用户代码中处理
其他信息:
此U2ParameterCollection的索引为1,且Count = 0。
答案 0 :(得分:0)
您可以尝试以下代码吗?此代码不使用实体框架(LINQ to Entity)。 我们想看看UniVerse在没有实体框架的情况下的表现。
您需要执行以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using U2.Data.Client;
using System.Data;
using System.Diagnostics;
namespace DataAdapter
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("start.........................");
Stopwatch sw = new Stopwatch();
sw.Start();
U2ConnectionStringBuilder conn_str = new U2ConnectionStringBuilder();
conn_str.UserID = "administrator";
conn_str.Password = "pass";
conn_str.Server = "localhost";
conn_str.Database = "XDEMO";
conn_str.ServerType = "UNIVERSE";
conn_str.Pooling = false;
string s = conn_str.ToString();
U2Connection con = new U2Connection();
con.ConnectionString = s;
con.Open();
Console.WriteLine("Connected...");
U2Command cmd = con.CreateCommand();
cmd.CommandText = "SELECT * FROM PRODUCTS";
DataSet ds = new DataSet();
U2DataAdapter da = new U2DataAdapter(cmd);
da.Fill(ds);
sw.Stop();
TimeSpan elapsed = sw.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", elapsed.Hours, elapsed.Minutes, elapsed.Seconds, elapsed.Milliseconds / 10);
int nSec = elapsed.Seconds;
con.Close();
Console.WriteLine("Time Taken in seconds:" + elapsedTime);
Console.WriteLine("End........................... ");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("Enter to exit:");
string line = Console.ReadLine();
}
}
}
}