рдкрд╛рда рдХрд╛ рдЙрджреНрджреЗрд╢реНрдпред рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЪрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВред рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред рдХрдХреНрд╖рд╛ рдХрд╛ рд╕рд░рд▓ рдФрд░ рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдгред рд╣рдо рд╕реНрдХреИрдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо "рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ" рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Scaffolder рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ред рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдирд╛рдирд╛ред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЪрдХреНрд░ред
Visual Studio 2013 рдХреЗ рд▓рд┐рдП рдордЪрд╛рди T4 рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИредрдордЪрд╛рдиред рдкреНрд░рд╛рд░рдВрднред
рдЗрд╕ рдФрд░ рдЕрдЧрд▓реЗ рдкрд╛рда рдореЗрдВ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рд╢реБрд░реВ рд╕реЗред рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рд╕рд╛рдЗрдЯ рдмрдирд╛рдИ, рддреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рдореБрдЭреЗ рджреВрд╕рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдорд┐рд▓реА, рддреЛ рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдкрд╛рдареЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореИрдВ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдпрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБ
- рдЗрд╕реЗ DbContext рдХреНрд▓рд╛рд╕ рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ
- рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдШреЛрд╖рдгрд╛ рдЬреЛрдбрд╝реЗрдВ
- SqlRepository рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ
- рдкреНрд░реЙрдХреНрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╡рд░реНрдЧ рдХрд╛ рдЖрдВрд╢рд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛрдбрд╝реЗрдВ
- рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВ
- рдорд╛рдирдЪрд┐рддреНрд░рдг рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
- рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдБ
- рджреЗрдЦрдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдмрдирд╛рдПрдВ
рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдмрд╛рдК рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЧрд▓рддреА рдХреА - рдФрд░ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдФрд░ рдореИрдВрдиреЗ рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдЖрдзрд╛ рд╣рд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, index.cshtml, edit.cshtml - рдпрд╣ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрдЯреАрд╡рди рд╕реИрдВрдбрд░рд╕рди рдХреЗ рд▓реЗрдЦ "
рдЕрдкрдиреЗ ASP.NET MVC 3 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ MvcScaffolding package "
рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЖрдЧ рдкрдХрдбрд╝ рд▓реАред рдордЪрд╛рди рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдореИрдВ рдкрдврд╝рд╛рдИ рдХрд░рдиреЗ рд▓рдЧрд╛ред рдпрд╣ T4 (
рдЯреЗрдХреНрд╕реНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдЯреВрд▓рдХрд┐рдЯ ) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реА-рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП
рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рд╣рдо рдкреИрдХреЗрдЬрдореЗрдиреНрдЬрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╡рд╛рд╣, рдХреИрд╕реЗ рдореБрдбрд╝реЗрдВ!)ред рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рдФрд░ T4 рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдбреБрдмрдХреА рд▓рдЧрд╛рдКрдВрдЧрд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЬреЛрдбрд╝реА рдордЪрд╛рди рдмрдирд╛рдКрдВрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рд╡рд░рд╕реНрд╡рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PowerGUI рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред VS2010 рдореЗрдВ PowerShell рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдВрдкрд╛рджрдХ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо VS2012 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрднреА рддрдХ рд╣рдо рдЗрддрдиреЗ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВред
рдареАрдХ рд╣реИ, рд╕реНрдерд╛рдкрд┐рддред рд╣рдо t4 рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ -
http://t4-editor.tangible-engineering.com ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрднреА рдХреЗ рд▓рд┐рдП, VS2012 рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕рдВрдкрд╛рджрдХред рдЕрдЪреНрдЫрд╛ - рд╡рд╣рд╛рдБ рдПрдХ рдмреИрдХрд▓рд╛рдЗрдЯ рд╣реИ, рдареАрдХ рд╣реИред
рдЯреА -4
рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред рдЪрд▓реЛ T4 рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
http://www.olegsych.com/2007/12/text-template-transformation-toolkit/рдЪрд▓реЛ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА LesssonProject.T4ред рдФрд░ рд╡рд╣рд╛рдВ HelloWorld.tt рдЬреЛрдбрд╝реЗрдВ:

рдЖрдЗрдП рдереЛрдбрд╝рд╛ рдмрджрд▓реЗрдВ:
<#@ template debug="true" hostSpecific="true" #> <#@ output extension=".cs" #> <#@ Assembly Name="System.Core" #> <#@ Assembly Name="System.Windows.Forms" #> <#@ import namespace="System" #> <#@ import namespace="System.IO" #> <#@ import namespace="System.Diagnostics" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Collections" #> <#@ import namespace="System.Collections.Generic" #> <# var greeting = "Hello, World!"; #> // This is the output code from your template // you only get syntax-highlighting here - not intellisense namespace MyNameSpace { class MyGeneratedClass { static void main (string[] args) { System.Console.WriteLine("<#= greeting #>"); } } } <#+ // Insert any template procedures here void foo(){} #>
рдареАрдХ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, .tt рдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ TextTransformation рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
<#@ template language="C#" #> Hello World!
рдзрд░реНрдорд╛рдиреНрддрд░рд┐рдд:
public class GeneratedTextTransform : Microsoft.VisualStudio.TextTemplating.TextTransformation { public override string TransformText() { this.Write("Hello, World!"); return this.GenerationEnvironment.ToString(); } }
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ .cs рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА:
Hello World!
рд╣рдо рдмреНрд▓реЙрдХ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ aspx рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ <# #> рдХреЛрд╖реНрдардХ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ <%%>ред рд▓реЗрдХрд┐рди, рдЬрдм рд╕реЗ рд╣рдордиреЗ рдПрд╕реНрдкрдХреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рддрдм:
- рдЯреЗрдХреНрд╕реНрдЯ рдмреНрд▓реЙрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдХреЛрдИ рднреА рдЧреИрд░-рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рд╣реИ (рдЯреИрдлреНрдЯреЛрд▓реЙрдЬреА рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ):
<#@ template language="C#" #> Hello World!
- рдПрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмреНрд▓реЙрдХ рдХрд┐рд╕реА рднреА рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИ <# #>ред рдпрд╣ рд╕рдм рдЕрдВрджрд░ рд╣реИ рдПрдХ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬреЛ рдкрд╛рда рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
<# var greeting = "Hello, World!"; #>
- рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмреНрд▓реЙрдХ <# = #> рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдПрдХ рдмреНрд▓реЙрдХ рд╣реИред рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛:
System.Console.WriteLine("<#= greeting #>");
- рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ
<#+ #>
рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдПрдХ рдмреНрд▓реЙрдХ рд╣реИред рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рд╕реНрд╡рдпрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреЗрдХреНрд╕реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред - рдирд┐рд░реНрджреЗрд╢
<#@ template #>
- рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд░реНрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
<#@ template language=тАЭC#тАЭ>
- рд╡рд░реНрдЧ рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд░рддреА рд╣реИред<#@ template debug=тАЭtrueтАЭ>
- рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреАрдврд╝реА рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред<#@ template inherits=тАЭMyTextTransformationтАЭ>
- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдкреАрдврд╝реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕ рд╡рд░реНрдЧ рдХреЛ рдкреАрдврд╝реА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдирд┐рд░реНрджреЗрд╢
<#@ output #>
- рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
<#@ output extension=".cs" #>
- рдирд┐рд░реНрджреЗрд╢
<#@ import #>
- рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдРрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди (рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдкрд╛рда рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп):
<#@ import namespace="System.Collections" #>
- рдирд┐рд░реНрджреЗрд╢
<#@ assembly #>
- рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдШреЛрд╖рдгрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред VisualStudio рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдХреЗ рд╕рдорд╛рди рд╣реИ:
<#@ Assembly Name="System.Core" #>
- рдирд┐рд░реНрджреЗрд╢
<#@ include #>
- рдШреЛрд╖рдгрд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреБрдЫ рдЕрдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ Html рдХреА рддрд░рд╣ рд╣реИред рдирд┐рд╖реНрдкрдХреНрд╖ ():
<#@ include file="Included.tt" #>
- рдирд┐рд░реНрджреЗрд╢
<#@ parameter #>
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рд▓рд┐рдВрдХ - рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП - рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдкрд░ рдпрд╣ рдЬреНрдЮрд╛рди рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣рдорд╛рд░реА рдЬрд╝рд░реВрд░рдд рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ MvcScaffolding рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
MVCScaffolding
T4Scaffolding рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
PM> Install-Package T4Scaffolding
LessonProject.Model рдореЗрдВ CodeTemplates / Scaffolders / IRepository рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕рдореЗрдВ IRepository.ps1 рдлрд╝рд╛рдЗрд▓реЗрдВ (LessonProject.Model / CodeTemplates / Scaffolders / IRepository.ps1) рдЬреЛрдбрд╝реЗрдВ:
[T4Scaffolding.Scaffolder(Description = )][CmdletBinding()] param( [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string]$ModelType, [string]$Project, [string]$CodeLanguage, [string[]]$TemplateFolders, [switch]$Force = $false ) $foundModelType = Get-ProjectType $ModelType -Project $Project -BlockUi if (!$foundModelType) { return } # Find the IRepository interface, or create it via a template if not already present $foundIRepositoryType = Get-ProjectType IRepository -Project $Project -AllowMultiple if(!$foundIRepositoryType) { #Create IRepository $outputPath = $defaultNamespace = (Get-Project $Project).Properties.Item().Value Add-ProjectItemViaTemplate $outputPath -Template IRepositoryTemplate ` -Model @{ Namespace = $defaultNamespace } ` -SuccessMessage ` -TemplateFolders $TemplateFolders -Project $Project -CodeLanguage $CodeLanguage -Force:$Force $foundIRepositoryType = Get-ProjectType IRepository -Project $Project } # Add a new property on the DbContext class if ($foundIRepositoryType) { $propertyName = $foundModelType.Name $propertyNames = Get-PluralizedWord $propertyName # This *is* a DbContext, so we can freely add a new property if there isn't already one for this model Add-ClassMemberViaTemplate -Name $propertyName -CodeClass $foundIRepositoryType -Template IRepositoryItemTemplate -Model @{ EntityType = $foundModelType; EntityTypeNamePluralized = $propertyNames; } -SuccessMessage "Added '$propertyName' to interface '$($foundIRepositoryType.FullName)'" -TemplateFolders $TemplateFolders -Project $Project -CodeLanguage $CodeLanguage } return @{ DbContextType = $foundDbContextType }
рдлрд┐рд░ IRepositoryItemTemplate.cs.t4:
<#@ Template Language="C#" HostSpecific="True" Inherits="DynamicTransform" #> #region <#= ((EnvDTE.CodeType)Model.EntityType).Name #> IQueryable<<#= ((EnvDTE.CodeType)Model.EntityType).Name #>> <#= Model.EntityTypeNamePluralized #> { get; } bool Create<#= ((EnvDTE.CodeType)Model.EntityType).Name #>(<#= ((EnvDTE.CodeType)Model.EntityType).Name #> instance); bool Update<#= ((EnvDTE.CodeType)Model.EntityType).Name #>(<#= ((EnvDTE.CodeType)Model.EntityType).Name #> instance); bool Remove<#=((EnvDTE.CodeType)Model.EntityType).Name #>(int id<#= ((EnvDTE.CodeType)Model.EntityType).Name #>); #endregion IRepositoryTemplate.cs.t4: <#@ Template Language="C#" HostSpecific="True" Inherits="DynamicTransform" #> <#@ Output Extension="cs" #> using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace <#= Model.Namespace #> { public interface IRepository { IQueryable<T> GetTable<T>() where T : class; } }
рдПрдХ рдирдИ рд╕реВрдЪрдирд╛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБ:
рдирд╛рдо | рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ |
UserIDint (рд╡рд┐рджреЗрд╢реАрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛)
рдореЗрд╕рдЬреЗрдирд╡рд░реНрдЧ (140)
AddedDatedatetime
IsReadedbit
DbContext (LessonProjectDb.dbml) рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд░реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ (ctrl-S):

рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХрдВрд╕реЛрд▓ рдореЗрдВ, LessonProject.Model рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗрдВ:
PM> Scaffold IRepository Notify Added 'Notify' to interface 'LessonProject.Model.IRepository'
рд╣реБрд░реНрд░реЗ! рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рд╕рд░рд▓, рд╕рд╣реА? рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ? рдареАрдХ рд╣реИ, рдЖрдЗрдП IRepository.ps1 рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
[T4Scaffolding.Scaffolder(Description = "Create IRepository interface")][CmdletBinding()] param( [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string]$ModelType, [string]$Project, [string]$CodeLanguage, [string[]]$TemplateFolders, [switch]$Force = $false )
рдпрд╣ рд╕реНрдХреИрдлрд╝реЛрд▓реНрдбрд░ рдХреЛрдб рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рд╣реИред
$ModelType
рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо
Scaffold IRepository Notify
ред рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдмрд▓, рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдХреЛрдб рд▓реИрдВрдЧреНрд╡реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдо рдирд╣реАрдВ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдЕрднреА рддрдХ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛:)
$foundModelType = Get-ProjectType $ModelType -Project $Project -BlockUi if (!$foundModelType) { return }
рд╡рд░реНрдЧ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬреЗрдВ IRepository.cs рдФрд░ рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрдирд╛рдПрдБ:
рдпрд╣рд╛рдБ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ IRepositoryTemplate.cs.t4 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рджреГрд╢реНрдп рдореЗрдВ)
-Model @{ Namespace = $defaultNamespace } `
рдФрд░ defaultNamespace рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
Get-Project $Project).Properties.Item("DefaultNamespace").Value
рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (CodeTemplates / Scaffolders / IRepository / IRepositoryTemplate.cs.t4):
namespace <#= Model.Namespace #>
рдареАрдХ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдпрд╛ рдорд┐рд▓реА) рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (
$foundIRepositoryType
), рддреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде
IRepositoryItemTemplate
рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдХрдИ рдЧреБрдг рдЬреЛрдбрд╝реЗрдВ:
рд╡рд┐рдХрд▓реНрдк:
-Model @{ EntityType = $foundModelType; EntityTypeNamePluralized = $propertyNames; }
рд╡реИрд╕реЗ,
Get-PluralizedWord
рдзреНрдпрд╛рди
Get-PluralizedWord
рдФрд░ рдирд┐рд░реНрдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЗрд╕рдХреА рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рд╣реИ:
IQueryable<Notify> Notifies { get; }
рдпрд╛рдиреА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрд╡рдЪрди рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛, рдФрд░ рди рдХреЗрд╡рд▓ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рдЗрди T4Scaffolding cmdlet рдХреЛ рджреЗрдЦреЗрдВ:
- Add-ClassMember - рдПрдХ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
$class = Get-ProjectType HomeController Add-ClassMember $class "public string MyNewStringField;"
- Add-ClassMemberViaTemplate - T4 рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреЛрдб рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝реЗрдВ:
$class = Get-ProjectType HomeController Add-ClassMemberViaTemplate -CodeClass $class -Template "YourTemplateName" -Model @{ SomeParam = "SomeValue"; AnotherParam = $false } -TemplateFolders $TemplateFolders
- Add-ProjectItemViaTemplate - рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдЗрдЯрдо) рдЬреЛрдбрд╝реЗрдВ:
Add-ProjectItemViaTemplate -OutputPath "Some\Folder\MyFile" -Template "YourTemplateName" -Model @{ SomeParam = "SomeValue"; AnotherParam = $false } -TemplateFolders $TemplateFolders
- Get-PluralizedWord / Get-SingularizedWord - рдмрд╣реБрд╡рдЪрди / рдПрдХрд╡рдЪрди рд╢рдмреНрдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
$result = Get-PluralizedWord Person
- Get-PrimaryKey - рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
$pk = Get-PrimaryKey StockItem
- Get-ProjectFolder - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
$folder = Get-ProjectFolder "Views\Shared" Write-Host "The shared views folder contains $($folder.Count) items"
- Get-ProjectItem - рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
$file = Get-ProjectItem "Controllers\HomeController.cs" $file.Open() $file.Activate()
- Get-ProjectLanguage - C # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП - cs, VB рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП VB рджреЗрддрд╛ рд╣реИ
$defaultProjectLanguage = Get-ProjectLanguage $otherProjectLanguage = Get-ProjectLanguage -Project SomeOtherProjectName
- Get-ProjectType - рдХреНрд▓рд╛рд╕ рдореЙрдбрд▓ (EnvDTE.CodeType) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
$class = Get-ProjectType HomeController Add-ClassMember $class "public string MyNewStringField;"
- Get-RelatedEntities - рд╕рднреА рдПрдХ рд╕реЗ рдХрдИ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдвреВрдБрдврддрд╛ рд╣реИ
Get-RelatedEntities Product
- рд╕реЗрдЯ-IsCededOut рд╕реНрд░реЛрдд-рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреЗрдХрдСрдЙрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Set-IsCheckedOut "Controllers\HomeController.cs"
рдЕрдЪреНрдЫрд╛ рдХреНрдпрд╛? рдЙрд╕ рд╢рдХреНрддрд┐ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреА рдЬрдЧрд╣ рд▓реЗрдЧреА? рд▓реЗрдХрд┐рди (!) рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпреЗ рд╕рднреА рдЖрджреЗрд╢ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рднреА рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдереЗред рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА рдЬрдм рдлрд╝реАрд▓реНрдб рдХреЛ рдЖрдИрдбреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЗрд╕реЗ PervichniyKlyuch рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрд╡рд╛рджреЛрдВ рдкрд░ рдЬреНрдпрд╛рджрд╛ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред рдпрд╣ рдордЪрд╛рди рд╣реИ, рдЕрд░реНрдерд╛рдд рдбреНрд░рд╛рдлреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рдг, рдмреЗрд╣рддрд░реАрди рд╕реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВред рдордЪрд╛рди рдХрд╛ рд╕рд╛рд░ рдЪрд╛рдп рдмрдирд╛рдирд╛, рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдкреАрдирд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдмреБрд░рд╛ рдпрд╛рдВрддреНрд░рд┐рдХ рджрд┐рдирдЪрд░реНрдпрд╛ рдмрдирд╛рддрд╛ рд╣реИред
рдлрд┐рд░ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ, EnvDTE.CodeType
рдЪрд▓реЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ EnvDTE.CodeType рдХреНрдпрд╛ рд╣реИред
рдХреЛрдб рдЯрд╛рдЗрдк рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреЗрдЯ-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
- рдкрд╣реБрдБрдЪ - рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдирд┐рдЬреА, рдЖрджрд┐ред
- рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВред
- рдЧреИрд╕реЗрдВ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдпрд╣ рддрддреНрд╡ рдирд┐рдХрд▓рддрд╛ рд╣реИред
- рдмрдЪреНрдЪреЗ - рдЗрд╕ рдХреЛрдб рдЯрд╛рдЗрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- рдЯрд┐рдкреНрдкрдгреА - рдХрдХреНрд╖рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдЯрд┐рдкреНрдкрдгреАред (рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рд▓реЗрдЦрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
- DerivedTypes - рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ред рдпрд╣ рдЧреБрдг Visual C # рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред
- DocComment - рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬреА рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдХрд░рддреА рд╣реИред
- DTE - рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рджреЗрддрд╛ рд╣реИ
- рдПрдВрдбрдкреЙрдЗрдВрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ рд╡рд╣ рд░реЗрдЦрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
- FullName - рдкреВрд░рд╛ рдирд╛рдо, рдЬреИрд╕реЗ рдХрд┐ System.Int32
- InfoLocation - рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- IsCodeType - рдХреНрдпрд╛ CodeType рдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- IsDerivedFrom - рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЛрдб рдЯрд╛рдЗрдк рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- рдкреНрд░рдХрд╛рд░ - рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░ рдЧреБрдгред
- рднрд╛рд╖рд╛ - рдпрд╣ рдХрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред
- рд╕рджрд╕реНрдп рд╡рд╕реНрддреБ рдХреЗ рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ ред
- рдирд╛рдо - рд╡рд╕реНрддреБ рдХрд╛ рдирд╛рдоред
- рдирд╛рдо рд╕реНрдерд╛рди - рд╡рд╕реНрддреБ рдХрд╛ рдирд╛рдо рд╕реНрдерд╛рдиред
- рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд╕реНрддреБ рдХрд╛ рддрддреНрдХрд╛рд▓ рдЬрдирдХ рд╣реИред
- ProjectItem - рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ред
- StartPoint - рд╡рд╣ рд░реЗрдЦрд╛ рдЬрд╣рд╛рдБ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рд╢реБрд░реВ рд╣реБрдЖред
рдЕрднреА рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ, T4Scaffolding рдореЗрдВ EnvDTEExtensions.cs рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ (рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
http://mvcscaffolding.codeplex.com/SourceControl/changeset/view/7s57d172314 ), рдЬреЛ рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдУрд╣! рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд░рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЪрд╛рдп рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ: LessonProject.Scaffolding, рдФрд░ рдкрд╣рд▓реЗ рд╕рдмрдХ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЙрд╕ рдЬреЛрдбрд╝реА рдХреЛ рддрд▓рд╡рд╛рд░ рдФрд░ рдпреЛрджреНрдзрд╛ рдХреЗ рд╕рд╛рде рд▓реЗрдВред
IWeapon.cs:
public interface IWeapon { void Kill(); }
Bazuka.cs:
public class Bazuka : IWeapon { public void Kill() { Console.WriteLine("BIG BADABUM!"); } }
Sword.cs:
public class Sword : IWeapon { public void Kill() { Console.WriteLine("Chuk-chuck"); } }
Warrior.cs:
T4Scaffolding рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
Install-Package T4Scaffolding
рд╕рд░рд▓рддрдо PowerShell (/CodeTemplates/Scaffolders/Details/Details.b1) рдмрдирд╛рдПрдБ:
[T4Scaffolding.Scaffolder(Description = "Print Details for class")][CmdletBinding()] param( [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string]$ModelType, [string]$Project, [string]$CodeLanguage, [string[]]$TemplateFolders, [switch]$Force = $false ) $foundModelType = Get-ProjectType $ModelType -Project $Project -BlockUi if (!$foundModelType) { return } $outputPath = Join-Path "Details" $ModelType Add-ProjectItemViaTemplate $outputPath -Template Details ` -Model @{ ModelType = $foundModelType } ` -SuccessMessage "Yippee-ki-yay"` -TemplateFolders $TemplateFolders -Project $Project -CodeLanguage $CodeLanguage -Force:$Force
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╡рд┐рд╡рд░рдг.t4 (/CodeTemplates/Scaffolders/Details/Details.cs.t4) рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<
Warrior.cs рдХреЗ рд▓рд┐рдП рд╡реНрдпреБрддреНрдкрдиреНрди
PM> Scaffold Details Warrior -Force:$true Yippee-ki-yay
- рдирд╛рдо \ _ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо
- рдореЙрдбрд▓ рдкреНрд░рдХрд╛рд░
- рдкрд╣реБрдВрдЪ
- рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
- рдЖрдзрд╛рд░ рд╡рд░реНрдЧ
- рдЯрд┐рдкреНрдкрдгреА
- рдкреНрд░рд▓реЗрдЦрди рдЯрд┐рдкреНрдкрдгреА
- рдлрд╝рд╛рдЗрд▓ рдХреА рд╡рд╣ рдкрдВрдХреНрддрд┐ рдЬрд╣рд╛рдБ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ рдФрд░ рдЬрд╣рд╛рдБ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдорд╛рдкреНрдд рд╣реБрдЖ рдерд╛
- рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдирд╛рдо
рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдордзреНрдпрд╡рд░реНрддреА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЬреЛ рдореИрдиреБрдЕрд▓ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирд┐рдпрдорд┐рдд рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╛рдпрджрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдХрдо рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
рдордЪрд╛рди рдХрд╛ рд╡рд░реНрдгрди
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЙрди рд╕рднреА рдордЪрд╛рдиреЛрдВ рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдХреЗрд╡рд▓ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдореИрдВ ManageAttribute рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕реМрдВрдкреА рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, LangColumn рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб "рднрд╛рд╖рд╛" рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдореЙрдбрд▓рд╡реНрдпреВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦрд╛рддреЗ рдореЗрдВ рднреА рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
- IRepository (рдореЙрдбрд▓)ред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ IRepository рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП CRUD рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ:
Scaffold IRepository ModelName
- рдкреНрд░реЙрдХреНрд╕реА (рдореЙрдбрд▓)ред рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рд▓реИрдВрдЧ: $ рд╕рдЪреНрдЪрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрдХреИрдлрд╝реЛрд▓реНрдбрд░ рднрд╛рд╖рд╛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ ModelName + "Lang" рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
Scaffold Proxy ModelName -Lang:$true
- SqlRepository (рдореЙрдбрд▓)ред ModelName рд╡рд░реНрдЧ рдХреЗ CRUD рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдирд┐рдЬреА рдкрджреНрдзрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реИрдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рд╣реИ
Scaffold SqlRepository ModelName -Lang:$true
- рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдореЙрдбрд▓)ред рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рддреАрди рдордЪрд╛рдиреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ
Scaffold ProviderRepository ModelName -Lang:$true
- рдореЙрдбрд▓ (рд╡реЗрдм)ред рдореЙрдбрд▓ / ViewModels рдореЗрдВ рдПрдХ ModelNameView рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ Mappers / MappersCollection.cs рдореЗрдВ рдПрдХ рдСрдЯреЛрдореИрдкрд░ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡реНрдпреВ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ / рдПрдбрд┐рдЯ рд╡реНрдпреВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- ShowIndex - рдпрд╣ рдлрд╝реАрд▓реНрдб рдЗрдВрдбреЗрдХреНрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧреА
- PrimaryField - ID рдлрд╝реАрд▓реНрдб
- рдЪреЗрдХрдмреЙрдХреНрд╕ - рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЗрдирдкреБрдЯ рддрддреНрд╡ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛
- DropDownField - рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП DropDownField рдЗрдирдкреБрдЯ рддрддреНрд╡ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рд╣рд┐рдбрдлрд╝рд┐рд▓реНрдб - рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдХреНрд╖реЗрддреНрд░
- HtmlTextField - textarea рдЗрдирдкреБрдЯ рддрддреНрд╡ htmltext рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд
- RadioField - рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ (рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
- TextAreaField - textarea рдЗрдирдкреБрдЯ рддрддреНрд╡
- TextBoxField - рдирд┐рдпрдорд┐рдд рдкрд╛рда рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб
Scaffold Model ModelName
- SelectReference (рд╡реЗрдм)ред рд╡реНрдпреВ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ-рд╕реЗ-рдПрдХ рд╕рдВрдмрдВрдз рдмрдирд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдкрд╕рдВрдж рдХреА рд╡рд╕реНрддреБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рд░рд╛рдЬреНрдп (рд░рд╛рдЬреНрдп) рдХреЗ рд╕рд╛рде рдПрдХ рд╢рд╣рд░ (рд╢рд╣рд░) рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рдПрдХ рд╢рд╣рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд░рд╛рдЬреНрдпрдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SelectReference рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ CityView рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЬреЛрдбрд╝ рджреЗрдЧрд╛:
Scaffold SelectReference City State
- рдирд┐рдпрдВрддреНрд░рдХ (рд╡реЗрдм)ред рджрд┐рдП рдЧрдП ModelName рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реВрдЪрдХрд╛рдВрдХ \ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рджреГрд╢реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
- рдХреНрд╖реЗрддреНрд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ), рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддрд╛ рд╣реИ
- рдкреЗрдЬрд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд), рдкреГрд╖реНрдард╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
- рд▓реИрдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд), рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
Scaffold Controller ModelName тАУArea:Admin тАУPaging:$true тАУLang:$true
- IndexView \ EditView (рд╡реЗрдм)ред рдПрдХ рд╕реВрдЪреА рджреГрд╢реНрдп рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ:
- рдХреНрд╖реЗрддреНрд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ), рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддрд╛ рд╣реИ
- рдкреЗрдЬрд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд), рдкреГрд╖реНрдард╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
- рд▓реИрдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд), рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
Scaffold IndexView ModelName тАУArea:Admin тАУPaging:$true тАУLang:$true Scaffold EditView ModelName тАУArea:Admin тАУPaging:$true тАУLang:$true
рдкрд░рд┐рдгрд╛рдо
рдордЪрд╛рди рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рдЦрд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрдИ рдореИрдиреБрдЕрд▓ рдХрд╛рдореЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред
рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ (рдСрдмреНрдЬреЗрдХреНрдЯ) рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдВрдЧреЗ:
- рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ (рдПрд╕) рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
- рдЗрд╕реЗ DBContext.dbml рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
- рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд░рд┐рдкреЗрд░рд┐рдЯрд░реА рдЪрд▓рд╛рдПрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
- рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдЪрд▓рд╛рдПрдБ
- рджреГрд╢реНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд▓рд┐рдЦреЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдирд┐рдХрд╛рд▓реЗрдВ
- рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдБ
- рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдлрд╝реАрд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛)
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдПрдХ рдмрдбрд╝реЗ рдкреИрдЪ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИред рдореИрдВ рдХрднреА-рдХрднреА 20-30 рдЯреЗрдмрд▓ рддрдХ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рдерд╛, рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 5 рдорд┐рдирдЯ рд▓рдЧрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдореБрдЭреЗ рдкреВрд░рд╛ рджрд┐рди рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рддрд╛ред
рдордЪрд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВ, рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЖрдВрддрд░рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рднреА рд╕реНрд░реЛрдд
https://bitbucket.org/chernikov/lessons рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ