Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 将实体框架代码转换为SQL或存储过程_Entity Framework_Sql Server 2008_Stored Procedures_Ef Code First - Fatal编程技术网

Entity framework 将实体框架代码转换为SQL或存储过程

Entity framework 将实体框架代码转换为SQL或存储过程,entity-framework,sql-server-2008,stored-procedures,ef-code-first,Entity Framework,Sql Server 2008,Stored Procedures,Ef Code First,我是.net开发人员。我擅长.net和EF。我编写EF代码,但存在性能问题(以下是我的问题:) 我有性能问题,我无法解决这个问题。所以我决定将EF代码第一个代码转换为存储过程或MSSQL 这是我的EF代码 List<Tuple<string, int, int>> result = new List<Tuple<string, int, int>>(); using (var db = new TourismContext())

我是.net开发人员。我擅长.net和EF。我编写EF代码,但存在性能问题(以下是我的问题:)

我有性能问题,我无法解决这个问题。所以我决定将EF代码第一个代码转换为存储过程或MSSQL

这是我的EF代码

List<Tuple<string, int, int>> result = new List<Tuple<string, int, int>>();

    using (var db = new TourismContext())
    {

        ModelState.Remove(q);

        var query = SearchWordFunctions.WordFunctions(q);


        var ListCity = db.CityTranslations.Where(
                c => (c.Slug.StartsWith(query) || c.Name.StartsWith(query))
                    &&
                    c.City.Latitude.HasValue
            ).GroupBy(x => x.CityID).Select(g => g.FirstOrDefault()).Take(10);

        var ListRegion = db.RegionTranslations.Where(
                r => (r.Slug.StartsWith(query) || r.Name.StartsWith(query))
                    &&
                    r.Region.Latitude.HasValue
                    &&
                    r.Region.RefID == 0 && r.Region.IsShow > 0
            ).GroupBy(x => x.RegionID).Select(g => g.FirstOrDefault()).Take(10);

        var LandMark = db.CityLandMarks.Where(l => l.Translations.Any(t => t.Name.StartsWith(query)) && l.Latitude.HasValue).Take(10);



        var hotel = db.HotelTranslations.Where(t => t.Url.Contains(query) && t.Hotel.Status > 0 && t.Culture.Code == culture).ToList();

        result.Clear();

        foreach (var item in ListCity.OrderBy(o => o.Name.Length))

        {
            result.Add(new Tuple<string, int, int>(string.Concat(item.Name, " - <b>", item.City.Country.Translations.Single(t => t.CultureID == 1).Name, "<b>"), item.CityID, 1));

            if (db.Regions.Any(r => r.CityID == item.CityID))
            {
               var regions = db.Regions.Where(r => r.CityID == item.CityID && r.Latitude.HasValue && r.RefID == 0 && r.IsShow > 0).GroupBy(g => g.ID).Select(x => x.FirstOrDefault()).ToList().OrderByDescending(o => o.SearchRating).Take(10);

                foreach (var regItem in regions)
                {
                  result.Add(new Tuple<string, int, int>(string.Concat(regItem.Translations.FirstOrDefault().Name, " - <b>", item.Name, "</b> - <b>", regItem.City.Country.Translations.FirstOrDefault().Name, "<b>"), regItem.ID, 2));
                }
            }
        }
        if (ListCity.Count() <= 0)
        {
            foreach (var item in ListRegion)
            {
                result.Add(new Tuple<string, int, int>(string.Concat(item.Name, " - <b>", item.Region.City.Translations.Single(t => t.Culture.Code == culture).Name, "</b> - <b>", item.Region.City.Country.Translations.Single(t => t.Culture.Code == culture).Name, "</b>"), item.RegionID, 2));
            }
        }

        foreach (var item in LandMark)
        {
            result.Add(new Tuple<string, int, int>(string.Concat(item.Translations.FirstOrDefault().Name, " - <b>", item.City.Translations.FirstOrDefault().Name, "</b> - <b>", item.City.Country.Translations.FirstOrDefault().Name, "</b>"), item.ID, 3));
        }

        foreach (var item in hotel)
        {
            result.Add(new Tuple<string, int, int>(string.Concat(item.Name, " - <b class=\"refid\" data=\"" + item.HotelID + "\">", item.Hotel.Region.City.Translations.First().Name, "</b>"), item.Hotel.Region.CityID, 1));
      }

    }

    return Json(result, JsonRequestBehavior.AllowGet);
}
列表结果=新列表();
使用(var db=new TourismContext())
{
ModelState.Remove(q);
var query=SearchWordFunctions.WordFunctions(q);
var ListCity=db.CityTranslations.Where(
c=>(c.Slug.StartsWith(查询)| | c.Name.StartsWith(查询))
&&
c、 City.Latitude.HasValue
).GroupBy(x=>x.CityID).Select(g=>g.FirstOrDefault()).Take(10);
var ListRegion=db.RegionTranslations.Where(
r=>(r.Slug.StartsWith(查询)| | r.Name.StartsWith(查询))
&&
r、 Region.Latitude.HasValue
&&
r、 Region.RefID==0&&r.Region.IsShow>0
).GroupBy(x=>x.RegionID).Select(g=>g.FirstOrDefault()).Take(10);
var LandMark=db.CityLandMarks.Where(l=>l.Translations.Any(t=>t.Name.StartsWith(query))&&l.Latitude.HasValue)。取(10);
var hotel=db.HotelTranslations.Where(t=>t.Url.Contains(query)&&t.hotel.Status>0&&t.Culture.Code==Culture.ToList();
result.Clear();
foreach(ListCity.OrderBy中的var项(o=>o.Name.Length))
{
添加(新元组(string.Concat(item.Name,“-”,item.City.Country.Translations.Single(t=>t.CultureID==1.Name,”),item.CityID,1));
if(db.Regions.Any(r=>r.CityID==item.CityID))
{
var regions=db.regions.Where(r=>r.CityID==item.CityID&&r.Latitude.HasValue&&r.RefID==0&&r.IsShow>0)。GroupBy(g=>g.ID)。选择(x=>x.FirstOrDefault()).ToList().OrderByDescending(o=>o.SearchRating)。取(10);
foreach(区域中的var区域)
{
添加(新元组(string.Concat(regItem.Translations.FirstOrDefault().Name,“-”,item.Name,“-”,regItem.City.Country.Translations.FirstOrDefault().Name,“”),regItem.ID,2));
}
}
}
if(ListCity.Count()t.Culture.Code==Culture.Name,“-”,item.Region.City.Country.Translations.Single(t=>t.Culture.Code==Culture.Name,”),item.RegionID,2));
}
}
foreach(LandMark中的var项目)
{
添加(新元组(string.Concat(item.Translations.FirstOrDefault().Name,“-”,item.City.Translations.FirstOrDefault().Name,“-”,item.City.Country.Translations.FirstOrDefault().Name,”),item.ID,3));
}
foreach(酒店中的var项目)
{
添加(新元组(string.Concat(item.Name,“-”,item.Hotel.Region.City.Translations.First().Name,“”),item.Hotel.Region.CityID,1));
}
}
返回Json(结果,JsonRequestBehavior.AllowGet);
}
我把代码转换成了这个,但它不能正常工作

GO
ALTER PROCEDURE [dbo].[GetHotelRegions]
(
 @query nvarchar(30),
 @culture bit
)
AS

select distinct top 400 ct.Name,co.Code,rt.Name,r.ID as RID,ht.Name,c.ID,h.ID

    --(ct.Name +' - <b>'+co.Code+'<b>') as CityName,
    --(rt.Name +' - <b>'+ct.Name+'</b> - <b>'+co.Code+'<b>') as RegionName,r.ID as RID,
    --ht.Name as HotelName,
        --(ht.Name +' - <b class=\"refid\" data=\"'+CONVERT(varchar(2),ht.ID)+'\'+ct.Name+'</b>') as HotelName,
    --c.ID
    from CityTranslations ct (nolock)
    inner join Cities c (nolock) on c.ID=ct.CityID and c.Latitude is not null
    inner join Regions r (nolock) on r.CityID = ct.CityID and r.RefID<=0
    inner join RegionTranslations rt (nolock) on r.ID=rt.RegionID and rt.CultureID=@culture 
    inner join Hotels h (nolock) on h.RegionID=r.ID and h.Status>0
    inner join HotelTranslations ht (nolock) on h.ID=ht.HotelID and rt.CultureID=@culture
    inner join Countries co (nolock) on co.ID=c.CountryID

 where ct.Slug LIKE @query+'%'
 or rt.Slug LIKE @query +'%'
 or ht.Url LIKE @query+'%'
GO
更改过程[dbo]。[GetHotelRegions]
(
@查询nvarchar(30),
@文化位
)
作为
选择不同的top 400 ct.Name、co.Code、rt.Name、r.ID作为RID、ht.Name、c.ID、h.ID
--(ct.Name+'-'+co.Code+'')作为城市名称,
--(rt.Name+'-'+ct.Name+'-'+co.Code+'')作为RegionName,r.ID作为RID,
--ht.名称为HotelName,

--(ht.Name+)-您能详细说明一下“它工作不正常”吗?是否引发错误,或输出是否不正确?无错误…输出不正确..sp输出与ef输出不同,因此不正确。我将分析ef通过或运行SQL Profiler生成的SQL-然后您可以单独运行该查询,并与手动运行存储过程的输出进行比较。然后,您可以修改存储过程代码,直到输出匹配EF生成的SQL(如果这是您的目标)。是否可以展开“它无法正常工作”?是否引发错误,或输出是否不正确?无错误…输出不正确..sp输出与ef输出不同,因此不正确。我将分析ef通过或运行SQL Profiler生成的SQL-然后您可以单独运行该查询,并与手动运行存储过程的输出进行比较。然后,您可以修改存储过程代码,直到输出匹配EF生成的SQL(如果这是您的目标)。