2013-09-10 4 views
0

Im пытается вызвать хранимую процедуру с использованием инфраструктуры Entity. Если я перехожу к веб-методу api, он отлично работает, но при вызове его от ветра он вызывает исключение в методе метаданных. Ошибка: «Не удалось найти тип CLR для ...». Кто-нибудь знает, как это исправить?Бриз с хранимой процедурой Ошибка CLR

+0

Необходимо увидеть код, показывающий, что работает, а что нет. –

ответ

1

У меня была такая же проблема, но, слава богу, я понял решение. Вместо использования хранимой процедуры вы должны использовать представление, так как Breeze распознает представления как DbSet<T>, так же, как и таблицы. Скажем, у вас есть таблица SQL-сервера, содержащая две таблицы Customers и Orders.

Customers (**CustomerId**, FirstName, LastName) 
Orders (OrderId, #CustomerId, OrderDate, OrderTotal) 

Теперь скажите, что вам нужен запрос, который возвращает заказы CustomerId. Обычно вы делаете это в хранимой процедуре, но, как я уже сказал, вам нужно использовать представление. Таким образом, запрос будет выглядеть так в представлении.

Select o.OrderId, c.CustomerId, o.OrderDate, o.OrderTotal 
from dbo.Orders o inner join dbo.Customers c on c.CustomerId = o.CustomerId 

Уведомление о том, что фильтрация (где ...) отсутствует. Таким образом:

i. Создайте [общее] представление, которое включает в себя фильтрующий ключ (ы) и назовите его, например, OrdersByCustomers

ii. Добавить представление OrdersByCustomers к модели объекта в проекте VS

iii. Добавить объект в контроллер Breeze, как таковые:

public IQueryable<OrdersByCustomers> OrdersByCustomerId(int id) 
{ 
    return _contextProvider.Context.OrdersByCustomers 
            .Where(r => r.CustomerId == id); 
} 

Обратите внимание на .где (г => r.CustomerId == Id) фильтра. Мы могли бы сделать это в файле службы данных, но поскольку мы хотим, чтобы пользователь видел только свои личные данные, нам нужно отфильтровать с сервера, чтобы он только возвращал свои данные.

iv. Теперь, что объект находится в контроллере, вы можете вызвать его в файле службы данных, такие, как:

var getOrdersByCustomerId = function(orderObservable, id) 
{ 
    var query = breeze.EntityQuery.from('OrdersByCustomerId') 
            .WithParameters({ CustomerId: id }); 

    return manager.executeQuery(query) 
        .then(function(data) { 
         if (orderObservable) orderObservable(data.results); 
        } 
        .fail(function(e) { 
         logError('Retrieve Data Failed'); 
        } 
} 

V Вы, наверное, знаете, что делать дальше отсюда..

Надеюсь, это поможет.

Смежные вопросы