2017-02-08 51 views
7

Mam tabelę pracowników z bigint podstawowym polem klucza w bazie danych i modelu danych jednostki z pierwszym podejściem do bazy danych. klasa pracownik ma taką strukturęNiepotrzebna konwersja do biginta

public partial class Employee 
{ 
    public long Emp_No { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    ... 
} 

Piszę to podstawowe kwerendy z Entity Framework

List<long> ids = new List<long>() {1,2,3,4,5,6} 
database.Employees.Where(q => ids.Contain(q.Emp_No)).ToList(); 

generować zapytania jak:

SELECT 
    [Extent1].[Emp_No] AS [Emp_No], 
    [Extent1].[Name] AS [Name], 
    [Extent1].[Family] AS [Family], 
    ... 
    FROM [dbo].[Employee] AS [Extent1] 
    WHERE [Extent1].[Emp_No] IN (cast(0 as bigint), 
           cast(1 as bigint), 
           cast(2 as bigint), 
           cast(3 as bigint), 
           cast(4 as bigint), 
           cast(5 as bigint), 
           cast(6 as bigint)) 

Jak widać nie jest konieczne oddanych do bigint w zapytaniu, podczas gdy oba typy tablic Emp_No i idslong, Powoduje złe czasy wykonania specjalnie, gdy tylko ids array ma wiele elementów.

Jak mogę usunąć tę nadmiarową obsadę?

Odpowiedz

3

Nie ma praktycznie żadnych kosztów w konwersji cast(0 as bigint) i dlatego Emp_No również bigint jeśli nie masz do obsady tam int nadal będą musiały być promowany do bigint, aby móc zrobić porównanie IN, więc obsada będzie nadal występować, tuż za kulisami.

Samodzielnie uruchom wersję ankietową w zarządzaniu i uzyskaj rzeczywisty plan wykonania, a konwersja będzie widoczna w planie kwerend.

-2

Nie bardzo wiadomo, o co prosisz o tutaj, ale ..

Zmień swoją długo int a zapytanie powinna Ci int zamiast bigint.

public partial class Employee 
{ 
    public int Emp_No { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    .... 
} 

Long jest odpowiednikiem biginta. można przeczytać więcej tutaj: What is the equivalent of bigint in C#?

+0

Nie mogę tego zrobić. Potrzebuję długiego typu –