- روش دوم هم در اینجا «Full text search in Microsoft's Entity Framework».
- روش سوم با استفاده از IDbCommandInterceptor در اینجا «Microsoft's Full Text Search in Entity Framework 6»
Here’s a summary of what’s new in this preview release:
TryParse
in MVC and API controllersResults.Stream()
overloadsServerReady
event for measuring startup time Today is a pretty exciting day if you’re an enterprise developer. . . Red Hat and Microsoft have announced that the two companies will be working together to bring a supported version of the .NET r untime to Red Hat’s Enterprise Linux and OpenShift 3
Recently, Carl Frankin, software developer, musician and presenter on the popular programming podcast DotNet Rocks, released a music album aimed a software developers. The album is called Music to Code By and comprises of 3 x 25 minute long music tracks.
//app.component.js class AppComponent extends HTMLElement { static is = 'app-root' connectedCallback(){ this.innerHTML=`<h1>Hello World!</h1>` } } customElements.define(AppComponent.is, AppComponent)
//index.html <app-root></app-root>
//confirm-link.component.js class ConfirmLinkComponent extends HTMLAnchorElement { static is = "confim-link"; connectedCallback() { this.addEventListener("click", e => { if (!confirm("Are you sure?")) { e.preventDefault(); } }); } } customElements.define(ConfirmLinkComponent.is, ConfirmLinkComponent, { extends: "a" });
<a href="http://google.com" is='confirm-link'> google.com </a>
var div = document.createElement('div'); var shadowRoot = div.attachShadow({mode: 'open'}); //or mode: 'closed' shadowRoot.innerHTML = '<h1>Hello Shadow DOM</h1>';
مفهوم دیگری وجود دارد تحت عنوان Shadow Boundary که تعیین کنندهی مرز بین Light DOM و Shadow DOM و همان لایهی مهیا کنندهی کپسولهسازی Styling و Markup میباشد. در مطالب آتی خواهیم دید که به چه شکلی رخدادهای سفارشی ما قابلیت عبور از این لایه را خواهند داشت.
<div id="template" hidden> <img src="logo.png"> <div class="comment"></div> </div>
<script id="template" type="text/x-template"> <img src="logo.png"> <div class="comment"></div> </script> <script id="template" type="text/x-kendo-template"> <ul> # for (var i = 0; i < data.length; i++) { # <li>#= data[i] #</li> # } # </ul> </script>
<template id="template"> <img src="logo.png"> <div class="comment"></div> </template>
var template = document.querySelector("template"); var clonedNode = template.content.cloneNode(true); //deep:true document.body.appendChild(clonedNode);
یکی از سؤالاتی که ممکن است در مصاحبهها با آن روبرو شوید، عنوان این مطلب است. در این مقاله قصد داریم تفاوت بین این دو را بررسی کنیم.
در علم کامپیوتر، یک call stack، یک ساختار دادهای پشته میباشد که اطلاعات جزئی را راجع به زیرروالهای فعال یک برنامه، ذخیره میکند. این نوع پشته با اسامی مختلفی از جمله Execution Stack (ES)، Program Stack (PS)، Control Stack، Runtime Stack یا Machine Stack شناخته میشود و یا اینکه به صورت کلی به آن The Stack یا همان پشته هم میگویند. با استفاده از صفحه Call Stack میتوانیم توابع و پروسیجرهایی را که فراخوانی شدهاند، ببینیم. Call Stack به ما میگوید که کدام متدها و توابع، با چه ترتیبی اجرا شدهاند. Call Stack یک راه بسیار خوب، برای فهم درست نحوهی اجرای یک برنامه است. با رهگیری یا Track کردن Call Stack میتوانیم بفهمیم که مکانیزم کار داخلی برنامه چگونه است و برای بهتر رفع کردن مشکلات، از آن استفاده کنیم. در سی شارپ، Stack Trace یک پشتهی اجرایی یا Execution Stack است که تمامی متدهای درحال اجرا را رهگیری (Track) میکند. Stack Trace راهی است که با استفاده از آن میتوانیم Call Stack را بررسی کنیم، تا شماره خط متدی را که Exception درآن رخ داده است، ببینیم. از این به بعد برای سادگی مطلب، Stack Trace را به صورت ST بیان میکنیم. برای دسترسی به ST از فضای نام System.Diagnostics مانند زیر استفاده میکنیم.
System.Diagnostics.StackTrace myTrack = new System.Diagnostics.StackTrace();
و یا برای مشاهدهی آن در کنسول از کد زیر استفاده میکنیم:
static void Main(string[] args) { Console.WriteLine("Stack Trace: {0}", Environment.StackTrace); }
نتیجه:
Stack Trace:at System.Environment.get_StackTrace() at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 9
استفاده از ST در Try Catch :
static void Main(string[] args) { try { throw new Exception(); } catch (Exception ex) { Console.WriteLine("Stack Trace: {0}", Environment.StackTrace); } }
نتیجه:
Stack Trace:at System.Environment.get_StackTrace() at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 11
حالا که مفهوم Stack Trace و نحوه کار و نمایش آن را بررسی کردیم، به راحتی میتوان تفاوت بین Throw و Throw Exception را درک کرد. به طور کلی میتوان اینطور گفت، در حالتیکه در داخل بلاک Catch، از Throw استفاده کنیم، این کار باعث میشود استثنائی که در اینجا رخ داده، به ابتدای ST افزوده شده و در واقع سلسله مراتب اجرای برنامه تا جایی که Throw نوشته شده، در ST نگهداری شود. اما در صورتیکه به جای Throw از Throw Exception استفاده کنیم، اتفاقی که رخ میدهد این است که ST تا اینجای کار که throw exception را استفاده میکنیم، نگهداری میشود و اطلاعات متدهایی که بعد از throw exception اجرا شدهاند، از آن حذف میشود. در نهایت در این حالت ST شامل اطلاعات متدهای اجرا شده در فرآیند جاری، از ابتدا تا رسیدن به throw exception میباشد.
در زیر، نمونه کدی را برای استفاده از Throw، میبینید:
class Program { static void Main(string[] args) { FirstExceptionMethod firstException = new FirstExceptionMethod(); try { firstException.Method1(); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } } } class FirstExceptionMethod { public void Method1() { try { SecondExceptionMethod secondException = new SecondExceptionMethod(); secondException.Method2(); } catch (Exception ex) { throw; } } } class SecondExceptionMethod { public void Method2() { try { ThrowExMethod(); } catch (Exception ex) { throw; } } public void ThrowExMethod() { throw new Exception(); } }
نتیجه:
at DiffThrowAndThrowException.SecondExceptionMethod.ThrowExMethod() in Program.cs:line 51 at DiffThrowAndThrowException.SecondExceptionMethod.Method2() in Program.cs:line 41 at DiffThrowAndThrowException.FirstExceptionMethod.Method1() in Program.cs:line 27 at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 12
همانطور که میبینید اطلاعات متدهایی که در این فرآیند اجرا شدهاند، در داخل Stack Trace رهگیری (track) شدهاند.
این دفعه برای نشان دادن تفاوت محتویات ST، کدهای Method1 را به شکل زیر تغییر میدهیم که در بخش catch آن، از throw exception استفاده کردهایم:
public void Method1() { try { SecondExceptionMethod secondException = new SecondExceptionMethod(); secondException.Method2(); } catch (Exception ex) { throw new Exception("Some Text ..."); } }
نتیجه:
at DiffThrowAndThrowException.FirstExceptionMethod.Method1() in Program.cs:line 31 at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 12
در اینجا اطلاعات متدهای برنامه از شروع فرآیند تا جائیکه از throw exception استفاده کرده، در ST نوشته میشود.
با دیدن خروجیهای بالا میتوان دریافت که استفاده از throw exception بجای throw باعث میشود تا اطلاعات کمتری از فرآیند اجرا شده در ST ذخیره شود و در واقع رهگیری متدهای فرآیند از ابتدا تا جائیکه throw exception استفاده میشود، پیش میرود و بعد از آن اطلاعاتی را ثبت نمیکند.
Server Error in '/' Application. Page not found: /test/index Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: Page not found: /test/index