2016-06-13 11 views
6

ObjectContext: ikenBOŞ DBContext içinde taşıma ve ben burada</p> <pre><code>from e in Employees where e.DesignationID !=558 select e </code></pre> <p><code>DesignationID</code> bir null alandır bu basit LINQ sorgu var

SELECT 
[Extent1].[EmployeeID] AS [EmployeeID], 
[Extent1].[EmployeeCode] AS [EmployeeCode], 
[Extent1].[EmployeeName] AS [EmployeeName], 
[Extent1].[DesignationID] AS [DesignationID] 
FROM [dbo].[setupEmployees] AS [Extent1] 
WHERE 558 <> [Extent1].[DesignationID] 

:

objectcontext yılında sorgu çevrilir dbcontext aynı sorguya çevrildi:

SELECT 
    [Extent1].[EmployeeID] AS [EmployeeID], 
    [Extent1].[EmployeeCode] AS [EmployeeCode], 
    [Extent1].[EmployeeName] AS [EmployeeName], 
    [Extent1].[DesignationID] AS [DesignationID] 
    FROM [dbo].[setupEmployees] AS [Extent1] 
WHERE NOT ((558 = [Extent1].[DesignationID]) AND ([Extent1].[DesignationID] IS NOT NULL)) 

Neden objectcontext NULL ile dbcontext'dan farklı NULL işlemektedir?

cevap

3

Bu davranış yapılandırılabilir, bu nedenle büyük olasılıkla farklı bir varsayılan sorun olur (Neden varsayılanın farklı olduğunu bilmiyorum).

kontrol DbContextConfiguration.UseDatabaseNullSemantics özelliği ile sağlanır:

alır veya potansiyel olarak olabilecek, her ikisi de iki tane işlenene karşılaştırırken veritabanı boş semantik sergilenmektedir olmadığını gösteren bir değeri belirler. Varsayılan değer false'dur. Örneğin (operand1 == operand2) şu şekilde çevrilir: (operand1 = operand2) UseDatabaseNullSemantics değeri true ise, (((işlenen1 = işlenen2) AND (DEĞİL (operand1 NULL VEYA işlenen2 IS NULL))) VEYA ((işlenen1 IS NULL) VE (operand2 IS NULL))) UseDatabaseNullSemantics yanlışsa).

public YourDbContext() 
{ 
    // ... 
    this.Configuration.UseDatabaseNullSemantics = true; 
} 
:

Eğer (sizin db bağlam kurucu içinde örneğin) true olarak ayarlayın gerektiğini, ilk örnekte olduğu gibi aynı çeviri istiyorsanız
İlgili konular