簡體   English   中英

實體框架生成了SQL查詢

[英]Entity Framework generated SQL queries

我有一個2 EF實體定義為:

public class Event
{               
    public DateTime Created { get; set; }
    public string Id { get; set; }
    public bool Public { get; set; }
    public EventType Type { get; set; }

    public virtual ICollection<Note> Notes { get; set; }              
}

public class Note
{
    public string EventId { get; set; }      // Link to parent event
    public int Id { get; set; }
    public string Text { get; set; }

    public virtual Event Event { get; set; }
}

Event訪問Notes集合時,將以以下形式構造SQL查詢:

exec sp_executesql N'SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[EventId] AS [EventId], 
    [Extent1].[Text] AS [Text]
    FROM [dbo].[Notes] AS [Extent1]
    WHERE [Extent1].[EventId] = @EntityKeyValue1',
    N'@EntityKeyValue1 nvarchar(128)',
    @EntityKeyValue1=N'N5427961'

此查詢,給定數據大小和索引使用超過3000讀取所需。 鑒於表格具有足夠的索引,這似乎有點多。 查詢分析器沒有建議加快查詢速度。

然后我發現如果我將SQL綁定中使用的數據類型從nvarchar(128)更改為varchar(33) ,它與DB表中的EventId的列類型完全匹配,則查詢現在只需要8次讀取。

這只是我需要使用DataAnnotations來告訴EF這些字段中SQL的數據類型是什么情況嗎? 或者是其他事情發生在這里?

我發現最容易獲得所需效果的方法是:

modelBuilder.Entity<Event>().Property(x => x.Id).IsUnicode(false).HasMaxLength(33);

使用注釋的其他建議方法不起作用,導致仍然使用nvarchar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM