Entity Framework 4 с CTP5 и грязный сгенерированный SQL - PullRequest
3 голосов
/ 04 февраля 2011

У меня проблема со странным сгенерированным SQL в ef4 ctp5.

У меня есть простая модель с отображением:

[Table("post_auction")]
public class PostAuction
{
    [Key,Column(Name="Id"),DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGenerationOption.Identity)]
    public int Id { get; set; }

    [Column(Name = "Number")]
    public int Number { get; set; }

    [Column(Name = "Label")]
    public string Label { get; set; }

    [Column(Name = "Description")]
    public string Description { get; set; }

    [Column(Name = "CategoryId")]
    public int PostAuctionCategoryId { get; set; }

    [Column(Name = "PriceCZK")]
    public int PriceCZK { get; set; }

    [NotMapped]
    public bool IsAuctionPhotoExitst
    {
        get
        {
            if (File.Exists(HttpContext.Current.Server.MapPath("~/Public/Images/Posts/Thumbs/small_" + this.Number + ".jpg")))
                return true;
            return false;
        }
    }
}

, и мой запрос linq:

_rovastampDbContext.PostAuctions.Where(x => x.PostAuctionCategoryId == auctionId).OrderBy(x => x.Id).ToList();

Профилировщик Ef4 показывает мне

SELECT   
    [Project1].[Id]          AS [Id],
    [Project1].[Number]      AS [Number],
    [Project1].[Label]       AS [Label],
    [Project1].[Description] AS [Description],
    [Project1].[CategoryId]  AS [CategoryId],
    [Project1].[PriceCZK]    AS [PriceCZK]
FROM
    (SELECT 
         [Extent1].[Id]          AS [Id],
         [Extent1].[Number]      AS [Number],
         [Extent1].[Label]       AS [Label],
         [Extent1].[Description] AS [Description],
         [Extent1].[CategoryId]  AS [CategoryId],
         [Extent1].[PriceCZK]    AS [PriceCZK]
     FROM   
         [dbo].[post_auction] AS [Extent1]
     WHERE  
         [Extent1].[CategoryId] = 1 /* @p__linq__0 */) AS [Project1]
     ORDER BY 
         [Project1].[Id] ASC

Мой вопрос довольно прост: зачем ef4 генерировать этот сложный запрос, когда правильный -

SELECT ... 
FROM TABLE 
WHERE CategoryId = 1 
ORDER BY Id ASC

Спасибо за ваш совет:)

Мартин

РЕДАКТИРОВАТЬ: Если я позволю EF для автоматического создания БД, проблема с запросом сохраняется ...

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

Да, конечно, похоже на бета-искаженный код gen для меня. Я только что попробовал это с LINQ-SQL, ничего подобного. Обязательно сообщите об этом!

0 голосов
/ 04 февраля 2011

Отличный вопрос. Я предполагаю, что это ошибка, так как мой (сгенерированный edmx) контекст Entity Framework не создает проекцию, как ваш. Я бы сообщил об этом как об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...