Вот простое решение:
String content;
content = new String(Files.readAllBytes(Paths.get("sample.txt")));
Да, это так, вот вот запись из моего блога :
Подсказка NOLOCK по сути такая же, как упаковка запроса в транзакции, «уровень изоляции» "установлено значение" read uncommitted ". Это означает, что запрос не волнует, если материал записывается в строки, которые он читает, - он будет читать эти «грязные» данные и возвращать их как часть набора результатов.
Оказывается, вы можете сделать всю транзакцию «прочитайте незафиксированную», используя старое пространство имен System.Transactions, представленное в .NET 2.0. Вот пример кода:
using (var txn = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted } )) { // Your LINQ to SQL query goes here }
Итак, я создаю новый объект TransactionScope и говорю ему использовать уровень изоляции без чтения. Запрос в операторе «using» теперь действует так, как если бы все его таблицы читались с помощью подсказки NOLOCK.
blockquote>Вот первые результаты поиска Google для «linq sql nolock»:
InfoQ: реализация NOLOCK с LINQ to SQL и LINQ to Entities
Matt Hamilton - LINQ to SQL и NOLOCK Советы: Mad Props!
Скотч Hanselman's Computer Zen - Получение LINQ to SQL и LINQ to ...
В моем случае Entity Framework 5 (на основе ответа @Soppus):
private FoobarEntities db = new FoobarEntities();
public FoobarController()
{
db.Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
}
В дополнение к дополнению LinqPad My Extensions
King LinqPad My Extensions
:
public static IQueryable<T> DumpNoLock<T>(this IQueryable<T> query)
{
using (var txn = GetNewReadUncommittedScope())
{
return query.Dump();
}
}
public static System.Transactions.TransactionScope GetNewReadUncommittedScope()
{
return new System.Transactions.TransactionScope(
System.Transactions.TransactionScopeOption.RequiresNew,
new System.Transactions.TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
});
}
public static IQueryable<T> DumpNoLock<T>(this IQueryable<T> query, string description)
{
using (var txn = GetNewReadUncommittedScope())
{
return query.Dump(description);
}
}
public static List<T> ToListNoLock<T>(this IQueryable<T> query)
{
using (var txn = GetNewReadUncommittedScope())
{
return query.ToList();
}
}
public static U NoLock<T,U>(this IQueryable<T> query, Func<IQueryable<T>,U> expr)
{
using (var txn = GetNewReadUncommittedScope())
{
return expr(query);
}
}
Последнее означает, что вы можете сделать NOLOCK
для любых оценочных запросов, у которых у вас нет NoLock
явно написано для (например, я получил для ToListNoLock
выше). Итак, например:
somequery.NoLock((x)=>x.Count()).Dump();
будет оценивать запрос с помощью NOLOCK
.
Обратите внимание, что вы должны убедиться, что вы оцениваете запрос. Например. .NoLock((x)=>x.Distinct()).Count().Dump()
ничего полезного ничего не сделает .Distinct().Count().Dump()
.
GetReadUncommittedScope()
, а затем выполнив using (var txn = GetReadUncommittedScope())
– asherber
5 January 2017 в 21:48
Простым способом может быть запуск команды в вашем классе DataContext
using (var dataContext = new DataContext())
{
dataContext.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
// Your SQL query
}
Ниже приведен метод расширения для использования с LINQPAD
public static IQueryable<T> Dump2<T>(this IQueryable<T> query)
{
using (var txn = new System.Transactions.TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
}))
{
return query.Dump();
}
}
. Затем вы можете назвать его как:
MyTable.Where(t => t.Title = "Blah").Dump2();