3

我使用EF 5.0 Code First.We無法在每個讀取查詢上實現nolock。請找到下面的代碼。實體框架4.0和5.0代碼首先提示IQLable查詢與NOLOCK

我的模型:

public class UserType 
{ 
    public UserType() 
    { 
     CreationDate = DateTime.Now; 
     UpdatedDate = DateTime.Now; 
     DeletedFlag = false; 
    } 
    public int UserTypeId { get; set; } 
    public string UserTypeName { get; set; } 

    public int CreatedBy { get; set; } 
    public int UpdatedBy { get; set; } 
    public DateTime CreationDate { get; set; } 
    public DateTime UpdatedDate { get; set; } 
    public bool DeletedFlag { get; set; } 
} 

RepositoryBase :(我們使用倉庫的設計模式)

public IQueryable<T> Query<T>() where T : class 
    { 
      return DataContext.Set<T>(); 
    } 

服務:

//TODO: place NOLOCK 
repBase.Query<UserType>().Where(ja => ja.DeletedFlag == false).OrderByDescending(ja => ja.UpdatedDate).ToList(); 

repBase是DB上下文的情況下調用在Query()之上。

現在我們要運行上面的查詢(NOLOCK)。

的Visual Studio 2012, EF 5.0代碼首先, C#.NET 4.0, MVC的Web API, 庫設計模式

在此先感謝。

+0

你只是不能用EF發出無鎖提示(或任何提示)。但是,只是好奇,你需要什麼? –

+0

爲避免死鎖並允許髒讀,內部應用修改了數據,但面向公衆的站點只是只讀的 – Nash

回答

4

不支持。 EF在查詢中絕不會發出NOLOCK,除非通過Database.SqlQueryDbSet.SqlQuery執行直接SQL,否則無法執行此操作。如果您想要由EF生成NOLOCK,則可以下載EF源代碼並修改其SQL生成引擎以添加提示。無論如何,你應該考慮在全球使用NOLOCK

+0

爲了避免死鎖並允許髒讀,內部應用修改了數據,但面向公衆的站點只是只讀的。 – Nash