baseName: "Project3.Core.MetadataCore.TagsService.en.resx" ,
baseName: "Project3.Core.MetadataCore.TagsService",
baseName: "Project3.Core.MetadataCore.TagsService.en.resx" ,
baseName: "Project3.Core.MetadataCore.TagsService",
- متصل شدن کاربران (login connections) قطع شدن ارتباط یک login
- اجرای دستورات T-SQL، شروع و پایان اجرای یک رویه، شروع و پایان یک دستور در طول اجرای یک رویه، اجرای رویههای دور Remote Procedure Call
- باز شدن یک Cursor
- بررسی و کنترل مجوزهای امنیتی
- SQL:BatchCompleted
- Audit Login
- Audit Logout
- Lock: Acquired
- Lock: Released
الگو | هدف |
Blank | ایجاد یک Trace کلی |
SP_Counts | ثبت اجرای هر رویه ذخیره شده برای تشخیص اینکه هر رویه چند بار اجرا شده است |
Standard | ثبت آمارهای کارائی برای هر رویه ذخیره شده و Queryهای عادی SQL که اجرا میشوند و عملیات ورود و خروج هر Login (پیش فرض) |
TSQL | ثبت یک لیست از همه رویههای ذخیره شده و Queryهای عادی SQL که اجرا میشوند ولی آمارهای کارائی را شامل نمیشود |
TSQL_Duration | ثبت مدت زمان اجرای هر رویه ذخیره شده و هر Query عادی SQL |
TSQL_Grouped | ثبت تمام loginها و logoutها در طول اجرای رویههای ذخیره شده و هر Query عادی SQL، شامل اطلاعاتی برای شناسائی برنامه و کاربری که درخواست را اجرا میکند |
TSQL_Locks | ثبت اطلاعات انسداد (blocking) و بن بست (deadlock) از قبیل blocked processes، deadlock chains، deadlock graphs,... . این الگو همچنین درخواستهای تمام رویههای ذخیره شده و تمامی دستورات هر رویه و هر Query عادی SQL را دریافت میکند |
TSQL_Replay | ثبت اجرای رویههای ذخیره شده و Queryهای SQL در یک SQL Instance و مهیا کردن امکان اجرای دوباره عملیات در سیستمی دیگر |
TSQL_SPs | ثبت کارائی برای Queryهای SQL، رویههای ذخیره شده و تمامی دستورات درون یک رویه ذخیره شده و نیز عملیات ورود و خروج هر Login |
Tuning | ثبت اطلاعات کارائی برای Queryهای عادی SQL و رویههای ذخیره شده و یا تمامی دستورات درون یک رویه ذخیره شده |
گروه رویداد | هدف |
Broker | 13 رویداد برای واسطه سرویس (Service Broker) |
CLR | 1 رویداد برای بارگذاری اسمبلیهای CLR (Common Language Runtime) |
Cursors | 7 رویداد برای ایجاد، دستیابی و در اختیار گرفتن Cursor |
Database | 6 رویداد برای رشد/کاهش (grow/shrink) فایل های Data/Log همچنین تغییرات حالت انعکاس (Mirroring) |
Deprecation | 2 رویداد برای آگاه کردن وضعیت نابسامان درون یک SQL Instance |
Errors and Warnings | 16 رویداد برای خطاها، هشدارها و پیغامهای اطلاعاتی که ثبت شده است |
Full Text | 3 رویداد برای پیگیری یک شاخص متنی کامل |
Locks | 9 رویداد برای بدست آوردن، رها کردن قفل و بن بست (Deadlock) |
OLEDB | 5 رویداد برای درخواستهای توزیع شده و RPC (اجرای رویههای دور) |
Objects | 3 رویداد برای وقتی که یک شی ایجاد، تغییر یا حذف میشود |
Performance | 14 رویداد برای ثبت نقشه درخواستها (Query Plan) برای استفاده نقشه راهنما (Plan Guide) به منظور بهینه سازی کارائی درخواست ها، همچنین این گروه رویداد در خواستهای متنی کامل (full text) را ثبت میکند |
Progress Report | 10 رویداد برای ایجاد Online Index |
Query Notifications | 4 رویداد برای سرویس اطلاع رسان (Notification Service) |
Scans | 2 رویداد برای وقتی که یک جدول یا شاخص، پویش میشود |
Security Audit | 44 رویداد برای وقتی که مجوزی استفاده شود، جابجائی هویتی رخ دهد، تنظیمات امنیتی اشیائی تغییر کند،یک SQL Instance شروع و متوقف شود و یک Database جایگزین شود یا از آن پشتیبان گرفته شود |
Server | 3 رویداد برای Mount Tape، تغییر کردن حافظه سرور و بستن یک فایل Trace |
Sessions | 3 رویداد برای وقتی که Connectionها موجود هستند و یک Trace فعال میشود، همچنین یک Trigger و یک تابع دسته بندی(classification functions) مربوط به مدیریت منابع(resource governor) رخ دهد |
Stored Procedures | 12 رویداد برای اجرای یک رویه ذخیره شده و دستورات درون آن ، کامپایل مجدد و استفاده از حافظه نهانی (Cache) |
Transactions | 13 رویداد برای شروع، ذخیره ، تائید و لغو یک تراکنش |
TSQL | 9 رویداد برای اجرای Queryهای SQL و جستجوهای XQUERY (در دادههای XML) |
User Configurable | 10 رویداد که شما میتوانید پیکربندی کنید |
5- روی Column Filters کلیک کنید و مطابق تصویر زیر برای DatabaseName فیلتری تنظیم کنید.
Select counters from list | Performance Object |
Output Queue Length | Network Interface |
% Processor Time | Processor |
Processor Queue Length | System |
Buffer Manager:Page life expectancy | SQLServer |
SELECT * INTO dbo.BaselineTrace FROM fn_trace_gettable(' c:\performance baseline.trc ', default);
public class Tb1 { public Tb1() { ListTb2 = new List<Tb2>(); } public int Id { get; set; } public string NameTb1 { get; set; } public virtual ICollection<Tb2> ListTb2 { get; set; } } public class Tb2 { public Tb2() { ListTb1 = new List<Tb1>(); } public int Id { get; set; } public string NameTb2 { get; set; } public virtual ICollection<Tb1> ListTb1 { get; set; } }
public class Tb1Map : EntityTypeConfiguration<Tb1> { public Tb1Map() { this.HasKey(x => x.Id); this.HasMany(x => x.ListTb2) .WithMany(xx => xx.ListTb1) .Map ( x => { x.MapLeftKey("Tb1Id"); x.MapRightKey("Tb2Id"); x.ToTable("Tb1Tb2"); } ); } } public class Tb2Map : EntityTypeConfiguration<Tb2> { public Tb2Map() { this.HasKey(x => x.Id); } }
var sv1 = new TableService<Tb1>(_uow); var sv2 = new TableService<Tb2>(_uow); var t1 = new Tb1 { NameTb1 = "T111" }; sv1.Add(t1); //var res1= _uow.SaveChanges(); var t2 = new Tb2 { NameTb2 = "T222" }; sv2.Add(t2); //var res2 = _uow.SaveChanges(); t1.ListTb2.Add(t2); var result = _uow.SaveChanges();
An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.
{"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_Tb1Tb2_Tb2\". The conflict occurred in database \"dbTest\", table \"dbo.Tb2\", column 'Id'.\r\nThe statement has been terminated."}
<head> <style> img { width: 100px; display: block; } </style> </head> <body> <header class="clearfix" style="height: 50vh; background: url(images/background.jpg) no-repeat center center; background-size: cover; margin-bottom: 20px;"> <div class="container"> <img src="images/wisdompetlogo.svg" alt="Wisdom Pet Logo"> </div> </header> <div class="container"> <section id="services"> <div class="row"> <article class="col"> <img class="mx-auto" src="images/icon-exoticpets.svg" alt="Icon"> <h3>Exotic Pets</h3> <p>We offer specialized care for reptiles, rodents, birds, and other exotic pets.</p> </article> <article class="col"> <img class="mx-auto" src="images/icon-grooming.svg" alt="Icon"> <h3>Grooming</h3> <p>Our therapeutic grooming treatments help battle fleas, allergic dermatitis, and other challenging skin conditions.</p> </article> <article class="col"> <img class="mx-auto" src="images/icon-health.svg" alt="Icon"> <h3>General Health</h3> <p>Wellness and senior exams, ultrasound, x-ray, and dental cleanings are just a few of our general health services.</p> </article> <article class="col"> <img class="mx-auto" src="images/icon-nutrition.svg" alt="Icon"> <h3>Nutrition</h3> <p>Let our nutrition experts review your pet's diet and prescribe a custom nutrition plan for optimum health and disease prevention.</p> </article> <article class="col"> <img class="mx-auto" src="images/icon-pestcontrol.svg" alt="Icon"> <h3>Pest Control</h3> <p>We offer the latest advances in safe and effective prevention and treatment of fleas, ticks, worms, heart worm, and other parasites.</p> </article> <article class="col"> <img class="mx-auto" src="images/icon-vaccinations.svg" alt="Icon"> <h3>Vaccinations</h3> <p>Our veterinarians are experienced in modern vaccination protocols that prevent many of the deadliest diseases in pets.</p> </article> </div> </section> </div> </body>
<div class="container">
<div class="container"> <section id="services"> <div class="row"> <article class="col">
در این تصویر، فرمول تعریف کلاسهای ستونها را در بوت استرپ 4 مشاهده میکنید. هر قسمتی از این فرمول که داخل پرانتز قرار گرفتهاست، یعنی ذکر آن اختیاری میباشد؛ به همین جهت در مثال قبلی، ذکر صرفا col نیز کار کرد. در این حالت اگر دو ستون را تعریف کنید، هر کدام 50 درصد عرض container را به خود اختصاص میدهند و اگر سه ستون تعریف شود، هر کدام 33 درصد عرض را اشغال میکنند.
<head> <style> img { width: 100%; height: 200px; max-height: 200px; } </style> </head> <body> <div class="container"> <div id="services"> <div class="row"> <section class="col"> <img src="images/image.png" alt="sample image"> <h4>Exotic Pets</h4> <p>We offer <strong>specialized</strong> care for <em>reptiles, rodents, birds,</em> and other exotic pets.</p> </section> <section class="col"> <img src="images/image.png" alt="sample image"> <h4>Grooming</h4> <p>Our therapeutic <span class="font-weight-bold">grooming</span> treatments help battle fleas, allergic dermatitis, and other challenging skin conditions.</p> </section> <section class="col"> <img src="images/image.png" alt="sample image"> <h4>General Health</h4> <p>Wellness and senior exams, ultrasound, x-ray, and dental cleanings are just a few of our general health services.</p> </section> <section class="col"> <img class="img-fluid" src="images/image.png" alt="sample image"> <h4>Nutrition</h4> <p>Let our nutrition experts review your pet's diet and prescribe a custom nutrition plan for optimum health and disease prevention.</p> </section> <section class="col"> <img src="images/image.png" alt="sample image"> <h4>Pest Control</h4> <p>We offer the latest advances in safe and effective prevention and treatment of fleas, ticks, worms, heart worm, and other parasites.</p> </section> <section class="col"> <img src="images/image.png" alt="sample image"> <h4>Vaccinations</h4> <p>Our veterinarians are experienced in modern vaccination protocols that prevent many of the deadliest diseases in pets.</p> </section> </div> </div> </div> </body>
<div class="container"> <div id="services"> <div class="row"> <section class="col-6">
<section class="col-sm">
<section class="col-sm-6">
<section class="col-sm-6 col-md-4">
<section class="col-sm-6 col-md-4 offset-sm-1">
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="5.0.0" targetFramework="net40" /> </packages>
PM> Install-Package EntityFramework.SqlServerCompact
No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
The foreign key constraint does not exist. [ PK_dbo.__MigrationHistory ]
ALTER TABLE [__MigrationHistory] ADD CONSTRAINT [PK___MigrationHistory] PRIMARY KEY ([MigrationId]);
ALTER TABLE [__MigrationHistory] drop CONSTRAINT [PK___MigrationHistory]; ALTER TABLE [__MigrationHistory] ADD CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY (MigrationId);
قصد دارم مجموعه ای کامل از اصول طراحی شیء گرا، الگوهای طراحی و best practice های مربوطه را ارائه دهم. از این رو ابتدا با اصول طراحی شروع میکنم. سپس در مقالات آتی به الگوهای مختلف خواهم پرداخت و تا جایی که معلومات اجازه دهد مشخص خواهم کرد که هر الگو متمرکز بر رعایت کدام یک از اصول است و اینکه آیا مناسب است از الگوی مورد نظر استفاده کنیم.
این مطالب نیز چکیده ای از آموزشهای Lynda, Pluralsight , SkillFeed و کتاب های Gang of four, Headfirst Design
patterns و ...
میباشد .
اصل اول: Encapsulate what varies
"آنچه را که تغییر میکند مشخص و جدا کن یا به عبارتی آنرا کپسوله کن"
برای آنکه بتوانیم کدی منعطف،
قابل استفاده مجدد و خوانا داشته باشیم، ابتدا باید بخشهای ثابت و متغیر کد را تشخیص
دهیم و کاری کنیم تا بخش ثابت، بدون تکرار در جای جای برنامه استفاده شود و سپس برای بخش
متغیر برنامه ریزی کنیم.
اصل دوم: Program to an interface not implementation
" برنامه نویسی را متمرکز بر واسط کن، نه نحوهی پیاده سازی "
برای این اصل تعابیر مختلفی ارائه شده است:
برای رعایت این اصل باید:
در کد زیر نحوهی تعریف واسط را برای کلاس و تعریف اشیاء از نوع واسط را میبینیم:
public interface IMyInterface { void DoWork(); } public class MyImplementation1 : IMyInterface { public void DoWork() { var implementationName = this.GetType().ToString(); Console.WriteLine("DoWork from " + implementationName); } } public class MyImplementation2 : IMyInterface { public void DoWork() { var implementationName = this.GetType().ToString(); Console.WriteLine("DoWork from " + implementationName); } } public class Context { IMyInterface myInterface; public void Print() { myInterface = new MyImplementation1(); myInterface.DoWork(); myInterface = new MyImplementation2(); myInterface.DoWork(); } }
اصل سوم: Favor composition over inheritance
"ترکیب را بر توارث ترجیح بده"
رابطه "دارد" (has a ) انعطاف بیشتری نسبت به ارث بری یا "از نوع ... هست" ( is a ) دارد. برای مثال فرض کنید کلاس Enemy رفتار Movable را دارد و این رفتار در طول بازی بر حسب موقعیتی تغییر میکند. اگر این رفتار را با توارث مدل کنیم، یعنی Enemy از نوع Movable باشد، آنگاه برای هر نوع رفتار Movable (هر نوع پیاده سازی) باید یک نوع Enemy داشته باشیم و تصور کنید بعضی از این پیاده سازیها در کلاس Player یکسان باشد. آنگاه کد باید دوباره تکرار شود. حال تصور کنید این موقعیت را با ترکیب مدل کنیم. آنگاه کلاس Enemy یک شیء از جنس Movable خواهد داشت و در زمان نیاز میتواند نوع این رفتار را با نمونه گیری از کلاسهای پیاده ساز آن، تغییر دهد. در واقع با اینکار اصل اول را رعایت کرده ایم و بخش ثابت را از بخش متغیر جدا نموده ایم.
در زیر مدلسازی با توارث را میبینیم:
public interface Movable { void Move(); } public class EnemyBase : Movable { // Enemy properties goes here protected int x, y; public virtual void Move() { x += 2; y += 2; } } public class EnemyWithMoveType2 : EnemyBase { // override the move method public override void Move() { x += 4; y += 4; } } public class EnemyWithMoveType3 : EnemyBase { // override the move method public override void Move() { x += 6; y += 6; } } public class PlayerBase : Movable { // Player properties goes here protected int x, y; public virtual void Move() { // same code as EnemyBase move method x += 2; y += 2; } } public class PlayerWithMoveType2 : PlayerBase { // override the move method public override void Move() { // same code as EnemyWithMoveType2 move method x += 4; y += 4; } } public class PlayerWithMoveType3 : PlayerBase { // override the move method public override void Move() { // same code as EnemyWithMoveType3 move method x += 6; y += 6; } }
در ادامه نیز مدلسازی با ترکیب را میبینیم:
public interface IMovable { void Move(ref int x, ref int y); } public class EnemyBase { // Enemy properties goes here protected int x, y; IMovable moveBehavior; public void SetMoveBehavior(IMovable _moveBehavior) { moveBehavior = _moveBehavior; } public void Move() { moveBehavior.Move(ref x,ref y); } } public class PlayerBase { // Player properties goes here protected int x, y; IMovable moveBehavior; public void SetMoveBehavior(IMovable _moveBehavior) { moveBehavior = _moveBehavior; } public void Move() { moveBehavior.Move(ref x, ref y); } } public class MoveBehavior1 { public void Move(ref int x, ref int y) { x += 2; y += 2; } } public class MoveBehavior2 : IMovable { public void Move(ref int x, ref int y) { x += 4; y += 4; } } public class MoveBehavior3 : IMovable { public void Move(ref int x, ref int y) { x += 6; y += 6; } }
همانطور که میبینید، با فراخوانی تابع SetMoveBehavior میتوان رفتار را در زمان اجرا تغییر داد.
در مقالهی بعدی به ادامهی اصول خواهم پرداخت. از شنیدن نظرات و سوالات شما خرسند خواهم شد.
> create-react-app sample-03 > cd sample-03 > npm start
const colors = ["red", "green", "blue"];
const items = colors.map(function(color) { return "<li>" + color + "</li>"; }); console.log(items);
const items2 = colors.map(color => "<li>" + color + "</li>"); console.log(items2);
const items3 = colors.map(color => `<li>${color}</li>`); console.log(items3);
const address = { street: "street 1", city: "city 1", country: "country 1" };
const street1 = address.street; const city1 = address.city; const country1 = address.country;
const { street, city, country } = address;
const { street: st } = address; console.log(st);
const first = [1, 2, 3]; const second = [4, 5, 6];
const combined = first.concat(second); console.log(combined);
const combined2 = [...first, ...second]; console.log(combined2);
const combined2 = [...first, "a", ...second, "b"]; console.log(combined2);
const clone = [...first]; console.log(clone);
const firstObject = { name: "User 1" }; const secondObject = { job: "Job 1" }; const combinedObject = { ...firstObject, ...secondObject, location: "Here" }; console.log(combinedObject);
{name: "User 1", job: "Job 1", location: "Here"}
const clonedObject = { ...firstObject }; console.log(clonedObject);
const person = { name: "User 1", walk() { console.log("walk"); } }; const person2 = { name: "User 2", walk() { console.log("walk"); } };
class Person { constructor(name) { this.name = name; } walk() { console.log("walk"); } }
const person3 = new Person("User 3"); console.log(person3.name); person3.walk();
class Teacher { teach() { console.log("teach"); } }
class Teacher extends Person { teach() { console.log("teach"); } }
const teacher = new Teacher("User 4");
console.log(teacher.name); teacher.teach(); teacher.walk();
class Teacher extends Person { constructor(name, degree) {}
Uncaught ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
class Teacher extends Person { constructor(name, degree) { super(name); this.degree = degree; } teach() { console.log("teach"); } }
const teacher = new Teacher("User 4", "MSc");
export class Teacher extends Person {
import { Person } from "./Person"; export class Teacher extends Person {
import { Person } from "./Person"; import { Teacher } from "./Teacher";
export default class Teacher extends Person {
import Teacher from "./Teacher";
import { Person } from "./Person"; export function testTeacher() { console.log("Test Teacher"); } export default class Teacher extends Person {
import Teacher, { testTeacher } from "./Teacher";
import React, { Component } from 'react';
float? yourSingle = -1.0f; Console.WriteLine( yourSingle.GetValueOrDefault() ); yourSingle = null; Console.WriteLine( yourSingle.GetValueOrDefault() ); // assign different default value Console.WriteLine( yourSingle.GetValueOrDefault( -2.4f ) ); // returns the same result as the above statement Console.WriteLine( yourSingle ?? -2.4f );
در صورتیکه مقداری را به عنوان پیش فرض، به پارامتر این متد ارسال نکنید، مقدار پیش فرض آن از نوع استفاده شده بدست میآید.
شما میتوانید برای دیکشنری نیز یک متد Get امن ایجاد کنید (در صورت عدم وجود کلید، بجای پرتاب استثناء، مقدار پیش فرض بازگشت داده شود).
public static class DictionaryExtensions { public static TValue GetValueOrDefault< TKey, TValue >( this Dictionary< TKey, TValue > dic, TKey key ) { TValue result; return dic.TryGetValue( key, out result ) ? result : default(TValue); } }
و روش استفاده
var names = new Dictionary< int, string > { { 0, "Vahid" } }; Console.WriteLine( names.GetValueOrDefault( 1 ) );
var startPath = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.Desktop ), "Start" ); var resultPath = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.Desktop ), "Result" ); var extractPath = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.Desktop ), "Extract" ); Directory.CreateDirectory( startPath ); Directory.CreateDirectory( resultPath ); Directory.CreateDirectory( extractPath ); var zipPath = Path.Combine( resultPath, Guid.NewGuid() + ".zip" ); ZipFile.CreateFromDirectory( startPath, zipPath ); ZipFile.ExtractToDirectory( zipPath, extractPath );
#if DEBUG #warning DEBUG is defined #endif
#if DEBUG #error DEBUG is defined #endif
در مثال زیر، در صورتیکه در خط اول break point قرار دهید و با کلید F10 برنامه را اجرا کنید، مشاهده میکنید که دیباگر، خطی را که بعد از دستور line hidden# نوشته شده است، در نظر نمیگیرد (برای دیباگ) اما اجرا میشود و دیباگر بر روی دستور بعد از line default# قرار میگیرد.
Console.WriteLine("Normal line #1."); // Set break point here. #line hidden Console.WriteLine("Hidden line."); #line default Console.WriteLine("Normal line #2.");
static unsafe void Fibonacci() { const int arraySize = 20; int* fib = stackalloc int[arraySize]; var p = fib; *p++ = *p++ = 1; for ( var i = 2; i < arraySize; ++i, ++p ) { *p = p[-1] + p[-2]; } for ( var i = 0; i < arraySize; ++i ) { System.Console.WriteLine( fib[i] ); } }