рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рдХрд╛рдиреВрдиреА рдШрдЯрдирд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдиреБрдЪрд┐рдд рдЖрд░реЛрдкреЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЦреЛрдП рд╣реБрдП рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд рдкрд░ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рдпрдереЛрдЪрд┐рдд рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИред
рдкреГрд╖реНрдарднреВрдорд┐
рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рддрдХрдиреАрдХреА рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓ рд░рд╣реА рд╣реИрдВред рдФрд░ "рдХреНрдпрд╛ рд╣реИ" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣рдореЗрд╢рд╛ рддрдп рд╕реЗ рджреВрд░ рд╣реИрдВред рдпрд╛рдиреА рдХрд┐рд╕реА рднреА рдХреНрд╖рдг рд╕рдм рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ UI рдкрд░ MSSQL + ASP.Net MVC3 + рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рдмрд┐рдирд╛)ред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ Linq рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рднреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢рд░реНрдд рд╣реИ рдХрд┐ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЖрддрд╛ рд╣реИред
рдФрд░ рд╣рд░ рд╕рдордп рд▓реЗрдЦрди рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред
рдЙрдкрд╛рдп рдХреНрдпрд╛ рд╣реИрдВ?
- 1. рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░ рд▓реЙрдЧрд┐рдВрдЧред рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдпреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЯреНрд░рд┐рдЧрд░ рд╣реИрдВ (рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рддреИрдпрд╛рд░ рддрд░реАрдХреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ 2 рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
- рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдпреВрдЬрд░рдиреЗрдо рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛ рдмрд╣реБрдд рдХреЛрдб рдФрд░ рд╕рдордп рд╣реИред
- 2. рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдкрд░ рд▓реЙрдЧрд┐рдВрдЧред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рджреЛрдиреЛрдВ рдЕрдиреБрд░реЛрдз, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдФрд░ рдбреЗрдЯрд╛ред
- 3. рдЖрдк IIS рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХрд╛ рд▓реЙрдЧ рдХрдИ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрдВрдЬреВрд╕ рд╣реИред рдЦреИрд░, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - рдЖрдк рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕реАрдорд┐рдд рд╣реИрдВ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдк рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред
рдореИрдВрдиреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдкрд░ рд▓реЙрдЧрд┐рдВрдЧ рдкрде - рд╕рдорд╛рдзрд╛рди рдкрде рдЪреБрдирд╛ред
рддреЛ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред
1. MSSQL рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВ
2. рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦреЗрдВ
3. Global.asax.cs рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
1. MSSQL рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рдмрдирд╛рдирд╛
рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO CREATE TABLE dbo.Log ( LogID bigint NOT NULL IDENTITY (1, 1), UserName nchar(100) NOT NULL, IP nchar(20) NOT NULL, Controller nchar(200) NOT NULL, Action nchar(100) NOT NULL, Number int NOT NULL, Field nchar(100) NOT NULL, Value nchar(1000) NOT NULL, CreateDate datetime NOT NULL, GUID nchar(40) NOT NULL ) ON [PRIMARY] GO ALTER TABLE dbo.Log ADD CONSTRAINT DF_Log_CreateDate DEFAULT getdate() FOR CreateDate GO ALTER TABLE dbo.Log ADD CONSTRAINT PK_Log PRIMARY KEY CLUSTERED ( LogID ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO ALTER TABLE dbo.Log SET (LOCK_ESCALATION = TABLE) GO COMMIT
2. рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ
рдЖрдкрдХреЛ рдЯреЗрдмрд▓ рдореИрдкрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ + рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Linq.Mapping; namespace %Namespace%.Models.Log { [Table(Name="Log")] public class Log { [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public long LogID { get; set; } [Column()] public string UserName { get; set; } [Column()] public string IP { get; set; } [Column()] public string Controller { get; set; } [Column()] public string Action { get; set; } [Column()] public int Number { get; set; } [Column()] public string Field { get; set; } [Column()] public string Value { get; set; } [Column()] public string GUID { get; set; } } }
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреНрд▓рд╛рд╕: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Linq; namespace %Namespace%.Models { public class LogRepository { protected Table< Log > table; public LogRepository (DataContext dataContext) { table = dataContext.GetTable< Log >(); } public void Add(Log entity) { table.InsertOnSubmit(entity); } public void SubmitChanges() { table.Context.SubmitChanges(); } } }
3. рд╣рдо Pre.equestHandlerExecute рдЗрд╡реЗрдВрдЯ рдкрд░ Global.asax.cs рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) { if (Request.RequestContext.RouteData.Values["controller"] == null) return; LogRepository logRepo = new LogRepository(new DataContext(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString)); string Controller = (Request.RequestContext.RouteData.Values["controller"]!=null?Request.RequestContext.RouteData.Values["controller"].ToString():"PanelSpecifications"); string Action = (Request.RequestContext.RouteData.Values["action"]!=null?Request.RequestContext.RouteData.Values["action"].ToString():"Index"); int counter = 0; string IP = Request.UserHostAddress; string UserName = User.Identity.Name; string GUID = Guid.NewGuid().ToString();
рджрд░рдЕрд╕рд▓, рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╕рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рджрд░реНрдЬ рдХреА рдЬрд╛рдПрдЧреАред
рдФрд░ рдЖрдк рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:
1. "рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ?"
2. "рдпрд╣ рдХрд┐рд╕рдиреЗ рдХрд┐рдпрд╛?"
2. "рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рд╣реИ? рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдЧрдарди рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛! "
рдЖрджрд┐
рд╡рд┐рдзрд┐ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рд▓реЙрдЧрд┐рдВрдЧ рдЫреЗрдж рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдлрд╝реАрд▓реНрдб рдФрд░ рдХреИрд╕реЗ рднрд░реЗ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред