Встраивание файлов Представления как ресурс в Двоичном файле

Я наткнулся на тот же подход, но когда таблица стала больше (core_challenges_table в вашем сценарии), whereHas оказалась очень медленной (около 1 минуты времени отклика).

Поэтому я использовал решение, подобное этому:

$ids = CoreChallenge::where('status', 'active')->pluck('id');

$challenges = Challenge::with('core_challenges')
                        ->whereIn('core_challenge_id', $ids)
                        ->get();

При таком подходе мой запрос сократился до 600 мс с 1 минуты.

Который может быть переведен в модельные рамки

class Challenge {

   public function scopeActive($query) {
       $activeIds = CoreChallenge::where('status', 'active')->pluck('id');

       return $query->whereIn('core_challenge_id', $ids);
   }
}

Challenge::with('core_challenges')->active()->get();
7
задан Palani 21 March 2009 в 10:30
поделиться

5 ответов

Фил Хаак только что опубликовал сообщение в блоге несколько дней назад, которое, вероятно, поможет вам; Он использует базу данных для хранения представлений и ruby ​​для их обработки, но я думаю, вы могли бы взять его прототип и заставить его работать для представлений, хранящихся в отдельной сборке, довольно легко.

Просто быстрый взгляд на код, и я думаю, Волшебный соус будет реализовывать VirtualPathProviderViewEngine (см., например, класс "RubyViewEngine") и вставлять ваш ViewEngine в коллекцию ViewEngines.Engines (см. Global.asax.cs).

7
ответ дан 7 December 2019 в 03:21
поделиться

Тип WebFormView в конечном счете называет BuildManager. CreateInstanceFromVirtualPath. Нет перегрузки или другой функции в BuildManager для взятия входа от потока вместо от виртуального тракта. Поэтому, если Вы не захотите реализовывать IView сами, то необходимо будет на самом деле распаковать файлы к диску так, чтобы они могли быть скомпилированы BuildManager. Вы могли все еще распределить свой DLL как единственный файл, но aspx файлы должны быть произведены для BuildManager для компиляции их. Посмотрите справку BuildManager для деталей.

0
ответ дан 7 December 2019 в 03:21
поделиться

Познакомьтесь с codeplex и взгляните на Управляемую платформу расширяемости

Как только вы это сделаете ...

Посмотрите, что Мартен Баллиау должен сказать о ASP.NET MVC и инфраструктуре управляемой расширяемости (MEF)

0
ответ дан 7 December 2019 в 03:21
поделиться

ПРИМЕЧАНИЕ. Это решение работает только при нацеливании на платформы .NET 2.0 (и более новые).

using System;
using System.Net;
using System.Net.NetworkInformation;
//...

public static string GetFQDN()
{
    string domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName;
    string hostName = Dns.GetHostName();

    domainName = "." + domainName;
    if(!hostName.EndsWith(domainName))  // if hostname does not already include domain name
    {
        hostName += domainName;   // add the domain name part
    }

    return hostName;                    // return the fully qualified name
}

ОБНОВЛЕНИЕ

Поскольку многие люди отметили, что Ответ Сэма ] является более кратким, я решил добавить некоторые комментарии к ответу.

Самое важное отметить, что код, который я дал, не эквивалентен следующему коду:

Dns.GetHostEntry("LocalHost").HostName

Хотя в В общем случае, когда компьютер подключен к сети и является частью домена, оба метода обычно дают одинаковый результат, в других сценариях результаты будут отличаться.

Сценарий, в котором выходные данные будут отличаться, - это когда компьютер не является частью домен. В этом случае Dns.GetHostEntry ("LocalHost"). HostName вернет localhost , в то время как приведенный выше метод GetFQDN () вернет NETBIOS-имя хоста.

Это различие важно, когда цель поиска полного доменного имени машины это для регистрации информации или создания отчета. Большую часть времени я использовал этот метод в журналах или отчетах, которые впоследствии используются для сопоставления информации с определенной машиной. Если машины не подключены к сети, идентификатор localhost бесполезен, тогда как имя дает необходимую информацию.

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

См. Пример, где вывод будет другим: http: // ideone.

2
ответ дан 7 December 2019 в 03:21
поделиться

Изучите ASP.NET MVC View Engine с помощью проекта VB.NET XML Literals на CodePlex http://vbmvc.codeplex.com

Первоначально это был пользовательский механизм просмотра Задуманный Дмитрием Робсманом, который является PUM для ASP.NET в Microsoft. Каждое представление является классом VB.NET, а пространство имен (вместо пути к файлу) используется для подключения представлений к контроллерам. Довольно просто скопировать содержимое ваших файлов представления ASPX в литералы XML в этих классах VB. И как классы, они компилируются в сборку без каких-либо дополнительных усилий.

Если ваши контроллеры являются C #, то, скорее всего, у вас получится 2 DLL, но у Скотта Хансельмана есть запись в блоге о том, как заставить C # и VB работать. вместе в одной сборке. http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild. aspx

0
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: