Universe Entity Framework选择起来很慢

时间:2014-06-03 15:57:53

标签: c# linq entity-framework u2netdk

我将使用实体框架代码第一种方法,并且发现只搜索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。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码吗?此代码不使用实体框架(LINQ to Entity)。 我们想看看UniVerse在没有实体框架的情况下的表现。

您需要执行以下操作:

  • 创建C#控制台应用程序
  • 使用以下代码替换Program.cs文件的内容
  • 右键单击 - &gt;添加参考 - &gt; C:\ Program Files(x86)\ Rocket Software \ U2 Toolkit for .NET \ U2 Database Provider \ bin.NETFramework \ v4.0 \ U2.Data.Client.dll
  • 更改连接字符串
  • 更改SQL语法
  • 运行程序。见下面的截图。它显示“以秒为单位的时间”。

代码



    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();
                }
            }
        }
    }


enter image description here