Обычно довольно типично определять навигационные свойства виртуальной модели. Когда свойство навигации определяется как виртуальное, оно может воспользоваться некоторыми функциональными возможностями Entity Framework. Наиболее распространенным является ленивая загрузка.
Lazy loading - хорошая функция многих ORM, потому что она позволяет динамически получать доступ к связанным данным из модели. Он не будет излишне запрашивать связанные данные до тех пор, пока он не будет фактически доступен, что уменьшит предварительный запрос данных из базы данных.
blockquote>Из книги «ASP.NET MVC 5 с Bootstrap и Knockout .js "
Почему бы не использовать SQL Profiler с добавленными событиями уровня оператора?
Редактирование : Добавьте события для Хранимых процедур: Запуск SP:Stmt или SP:Stmt Завершенные переменные Использования, чтобы отладить в случае необходимости, т.е. установить @debug ='i здесь'; UDF's, в то время как не технически хранимые процедуры, будет прослежен с событиями уровня оператора.
В профилировщике SQL Вам нужно: SP:Starting, SP:StmtStarting, SP:Completed, SQL:BatchStarting. Затем Вы получаете каждую запись, выход от функций/хранимых процедур.
alter FUNCTION [dbo].[ufn_mjf](@i numeric(10))
RETURNS numeric(20)
AS
BEGIN
declare @datapoint varchar(10)
set @datapoint = 'hello world'
return @i
END
go
drop table foo
go
create table dbo.foo ( foo_id numeric(10))
go
delete from foo
insert into foo ( foo_id ) values ( 1 )
insert into foo ( foo_id ) values ( 2 )
select foo_id, dbo.ufn_mjf(foo_id) from foo
с этим, я добираюсь:
SQL:BatchStarting alter FUNCTION [dbo].[ufn_mjf](@i numeric(10))
SQL:BatchStarting drop table foo
SQL:BatchStarting create table dbo.foo ( foo_id numeric(10))
SQL:BatchStarting delete from foo
insert into foo ( foo_id ) values ( 1 )
insert into foo ( foo_id ) values ( 2 )
select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:Starting select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:StmtStarting set @datapoint = 'hello world'
SP:StmtStarting return @i
SP:Completed select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:Starting select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:StmtStarting set @datapoint = 'hello world'
SP:StmtStarting return @i
SP:Completed select foo_id, dbo.ufn_mjf(foo_id) from foo
то, что достаточно для Вас?
Это похоже на то, в чем Вы нуждаетесь, но это только доступно в версиях команды / про версиях Visual Studio.
Используйте SQL Profiler, я рекомендую пойти за борт на добавляющих событиях в первый раз, когда вокруг который позволит Вам получить ощущение того, в чем Вы нуждаетесь. Не тестируя я добавил бы события для SP:StmtStarted (или Завершенный или оба), SQL:StmtStarted (снова Завершенный или Оба).
Я второй предложение SQL Profiler. Не торопитесь для установки его так, чтобы только события, которыми Вы интересуетесь, были зарегистрированы для вырезания выходного размера. Можно произвести трассировку в файл - я часто тогда загружал тот файл назад в таблицу для включения анализа. (чрезвычайно удобный для анализа производительности, хотя несомненно кто-то скажет мне в том 2008, имеет это все созданное в somwehere...)
Иногда, у Вас не будет полномочий выполнить SQL Profiler, поскольку это действительно замедляется, сервер - просят, чтобы Ваш DBA дал Вам разрешение на Ваш сервер Dev. У них не должно быть проблем с этим.
Хорошо в прошлом я должен был принять типичные значения, которые были бы в UDF и затем выполнили бы просто udf часть в отдельном окне запроса так же прямой SQL не udf использование типичных значений как набор переменных с объявлением и оператором набора. Если бы это выполняется от таблицы вместо того, чтобы иметь только одно значение, я настроил бы временную таблицу или табличную переменную с входными значениями и затем выполнил бы их через sql в UDF (но снова как прямой SQL не UDF) через курсор. Путем выполнения прямого SQL у Вас могли быть операторы печати в нем для наблюдения то, что происходит. Я знаю, что это - боль, но она работает. (Я прохожу подобный процесс при создании/отладке триггеров, устанавливаю #inserted и #deleted с моими тестовыми значениями и затем тестирую код, который я намереваюсь поместить в триггер, тогда глобальная замена # ни с чем и добавить создать триггерный код.)
Возможно, можно использовать SQL CLR, чтобы сделать трассировку, как описано здесь , Как войти в систему T-SQL
Можно ли взять функцию и сделать ли вторую копию из нее, но возврат типа таблицы с дополнительным столбцом для отладочной информации.
, Например, функция mySum ниже
CREATE FUNCTION mySum
(
@param1 int,
@param2 int
)
RETURNS INT AS
BEGIN
DECLARE @mySum int
SET @mySum = @param1
SET @mySum = @mySum + @param2
RETURN @mySum
END
GO
SELECT dbo.mySum(1, 2)
превратилась бы
CREATE FUNCTION mySumDebug
(
@param1 int,
@param2 int
)
RETURNS @myTable TABLE
(
[mySum] int,
[debug] nvarchar(max)
)
AS
BEGIN
DECLARE @debug nvarchar(max)
SET @debug = 'Declare @mySum variable. '
DECLARE @mySum int
SET @debug = @debug + 'Set @mySum = @param1(' + CONVERT(nvarchar(50), @param1) + ') '
SET @mySum = @param1
SET @debug = @debug + 'Add @param2(' + CONVERT(nvarchar(50), @param2) + ') to @mySum(' + CONVERT(nvarchar(50), @mySum) + ') '
SET @mySum = @mySum + @param2
SET @debug = @debug + 'Return @mySum variable. '
INSERT @myTable (mySum, debug) VALUES (@mySum, @debug)
RETURN
END
GO
SELECT mySum, debug FROM dbo.mySumDebug(1, 2)
Не идеальное решение, но полезный только для возврата некоторого текста, чтобы помочь разыскать ошибку.
Я использую ШПИОНА SQL, который делает то, что Вы ищете и т.д.
Документация Функции ШПИОНА SQL
Входящий Сниффер SQL ШПИОНА SQL показывает входящий код SQL каждого соединения (Отслеживание оператора Includes DDL и DML)
, Эта функция разработана для SQL Server MS 2005\2008, но будет работать с SQL Server 2000 MS в ограниченном объеме. Это имеет способность к отчету и докладу на Входящем SQL. Как использовать функции: См.
Раскрытие: Я - часть команды ШПИОНА SQL.