MSSQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдорд╛рдЗрдЧреНрд░реЗрд╢рди





рдирдорд╕реНрддреЗ!



рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ MSSQL рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рдорд░реНрдерди рдФрд░ рдкреНрд░рд╡рд╛рд╕рди рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рднреАред



рд╕рдорд╕реНрдпрд╛


рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╛рддрд╛рд╡рд░рдг (рдкрд░реНрдпрд╛рд╡рд░рдг) рд╣реИрдВред

рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдлрд┐рд░, рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЙрдирдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рднреАред

рддрджрдиреБрд╕рд╛рд░, рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рди рдХреЗрд╡рд▓ рдХреЛрдб рдореЗрдВ, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред

рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред



рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк


рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

1. рдЙрддреНрдкрд╛рдж рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рддрд╣рдд рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрд▓рдЧ рддреИрдирд╛рдд рдЗрдВрдЬреАрдирд┐рдпрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрдирдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдФрд░ рдЕрдиреБрдкрд╛рд▓рди рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдорд┐рдд рдФрд░ рдЕрдиреБрд╕реВрдЪрд┐рдд рд░рд┐рд▓реАрдЬрд╝ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░рдВрддрд░ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рд╕рдХрддреА рд╣реИред

2. рдбреЗрдЯрд╛рдмреЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреИрдЪ рднреЗрдЬрддреЗ рд╣реИрдВред рдЗрди рдкреИрдЪреЛрдВ рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреИрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдлрд┐рд░ рд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╕рд┐рд░реНрдл рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд┐рд▓рд╛рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдмрджрд▓рд╛рд╡ рдХрдм рдФрд░ рдХрд┐рд╕рдиреЗ рдХрд┐рдПред рддреНрд░реБрдЯрд┐ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ред

3. рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдЦрд┐рд░реА рд╡рд┐рдХрд▓реНрдк рдФрд░ рдореЗрд░реЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг, рдЬреИрд╕реЗ рдХрд┐ рдлреНрд▓реЗрдВрдЯрдорд┐рдЧреЗрдЯрд░ ,ред рдиреЗрдЯ рдорд╛рдЗрдЧреНрд░реЗрдЯрд░, рдФрд░ рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред



рдореЗрд░рд╛ рдлреИрд╕рд▓рд╛


рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрд╛ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдб рдмреЗрд╣рдж рдЙрджрд╛рд░ рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд CodePlex.com рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛рдиреБрд╕рд╛рд░ рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рд╕рд┐рд╕реНрдЯрдо рджреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдпреБрдХреНрдд рдПрдХ WinForm рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИред рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдлреНрд▓реБрдПрдВрдЯрдорд┐рдЧреНрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдХрд┐ рдлреНрд▓реБрдПрдВрдЯрдорд┐рдЧреНрд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЦрд╛рддрд╛ рд╣реВрдВ; рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рд╕рд░рд▓ рдирд╛рдо "C # рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрдЯрд░" рдХреЗ рд╕рд╛рде рд╣реИ, рдпрд╣рд╛рдБ рд╣реИ: https://csharpdatabasemigrator.codeplex.com/

рд╕рд┐рд╕реНрдЯрдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

1. рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рд╣реИред

2. рд╕рд┐рд╕реНрдЯрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдмреИрдХрдЕрдк рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

3. рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА .sql рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓реА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

4. рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЖрдзрд╛рд░ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ


1. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ https://csharpdatabasemigrator.codeplex.com/SourceControl/latest

2. рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ

3. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ (рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЛрд▓реНрдбрд░) рдкрд░ рдЬрд╛рдПрдВ

4. рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рд╢реНрд░реЗрдгреА рд╣реИ

using FluentMigrator; namespace Migrations.Default { [Migration(1, "Author: AuthorName; Description")] public class Migration_1: Migration { public override void Up() { // Migration Up code here } public override void Down() { // Migration Down code here } } }
      
      





5. рдХреНрд▓рд╛рд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг, рд╕рд╛рде рд╣реА рдкреНрд░рд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдб рднреА рд▓рд┐рдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛

 Create.Table("Users") .WithIdColumn() .WithColumn("Name").AsString().NotNullable();
      
      





рдЖрдк SQL рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 Execute.Sql("DELETE TABLE Users");
      
      





рдЖрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/schambers/fluentmigrator/wiki/Fluent-Interface

6. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:



7. рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

8. рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ

9. рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ "рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ" рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "рдиреМрдХрд░реА рдХрд░реЗрдВ" рдмрдЯрди рджрдмрд╛рдПрдВ

10. рдлреЙрд░реНрдо рдХреЗ рджрд╛рдИрдВ рдУрд░ рд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ



рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ


рд╕рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдирд╛рдо рд╕реЗ "Migrations.Default" рд╣реИред рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MySecondDatabase рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ MigrationNamespaces.config рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <MigrationNamespaces> <MigrationNamespace Name="Default" Path="Migrations.Default"/> <MigrationNamespace Name="My Second Database" Path="Migrations.MySecondDatabase"/> </MigrationNamespaces> </configuration>
      
      





рдЙрд╕рдХреЗ рдмрд╛рдж, рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛ рдореЗрдВ "рдореЗрд░рд╛ рджреВрд╕рд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕" рдкреНрд░рдХрд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред



рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ SQL рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛


1. рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд╛рдо рд╕реЗ рдХреНрд░рдорд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:









рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


C # рдХреЛрдб рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ FluentMigrator.Runner рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 public Action<string> OnNewUpdateLog; public void UpdateToLatestVersion(string databaseName, string migrationNamespace) { // ,          FluentMigrator-a var announcer = new TextWriterAnnouncer(OnNewUpdateLog); //    var assembly = Assembly.GetExecutingAssembly(); //       ,     var migrationContext = new RunnerContext(announcer) { Namespace = migrationNamespace }; var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 }; //   SqlServer2008 var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory(); var processor = factory.Create(GetConnectionString(databaseName), announcer, options); //  runner var runner = new MigrationRunner(assembly, migrationContext, processor); //     runner.MigrateUp(true); OnNewUpdateLog("Done"); }
      
      







рдбреЗрдЯрд╛рдмреЗрд╕ рдмреИрдХрдЕрдк рдмрдирд╛рдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

 public void BackupDatabase(string databaseName, string destinationPath) { var sqlServer = new Server(_connection); databaseName = databaseName.Replace("[", "").Replace("]", ""); var sqlBackup = new Backup { Action = BackupActionType.Database, BackupSetDescription = "ArchiveDataBase:" + DateTime.Now.ToShortDateString(), BackupSetName = "Archive", Database = databaseName }; var deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File); sqlBackup.Initialize = true; sqlBackup.Checksum = true; sqlBackup.ContinueAfterError = true; sqlBackup.Devices.Add(deviceItem); sqlBackup.Incremental = false; sqlBackup.ExpirationDate = DateTime.Now.AddDays(3); sqlBackup.LogTruncation = BackupTruncateLogType.Truncate; sqlBackup.PercentCompleteNotification = 10; sqlBackup.PercentComplete += (sender, e) => OnSqlBackupPercentComplete(e.Percent, e.Message); sqlBackup.Complete += (sender, e) => OnSqlBackupComplete(e.Error); sqlBackup.FormatMedia = false; sqlBackup.SqlBackup(sqlServer); } public void RestoreDatabase(string databaseName, string filePath) { var sqlServer = new Server(_connection); databaseName = databaseName.Replace("[", "").Replace("]", ""); var sqlRestore = new Restore(); sqlRestore.PercentCompleteNotification = 10; sqlRestore.PercentComplete += (sender, e) => OnSqlRestorePercentComplete(e.Percent, e.Message); sqlRestore.Complete += (sender, e) => OnSqlRestoreComplete(e.Error); var deviceItem = new BackupDeviceItem(filePath, DeviceType.File); sqlRestore.Devices.Add(deviceItem); sqlRestore.Database = databaseName; DataTable dtFileList = sqlRestore.ReadFileList(sqlServer); int lastIndexOf = dtFileList.Rows[1][1].ToString().LastIndexOf(@"\"); string physicalName = dtFileList.Rows[1][1].ToString().Substring(0, lastIndexOf + 1); string dbLogicalName = dtFileList.Rows[0][0].ToString(); if (!Directory.Exists(physicalName)) { physicalName = sqlServer.MasterDBPath + "\\"; } string dbPhysicalName = physicalName + databaseName + ".mdf"; string logLogicalName = dtFileList.Rows[1][0].ToString(); string logPhysicalName = physicalName + databaseName + "_log.ldf"; sqlRestore.RelocateFiles.Add(new RelocateFile(dbLogicalName, dbPhysicalName)); sqlRestore.RelocateFiles.Add(new RelocateFile(logLogicalName, logPhysicalName)); sqlServer.KillAllProcesses(sqlRestore.Database); Database db = sqlServer.Databases[databaseName]; if (db != null) { db.DatabaseOptions.UserAccess = DatabaseUserAccess.Single; db.Alter(TerminationClause.RollbackTransactionsImmediately); sqlServer.DetachDatabase(sqlRestore.Database, false); } sqlRestore.Action = RestoreActionType.Database; sqlRestore.ReplaceDatabase = true; sqlRestore.SqlRestore(sqlServer); db = sqlServer.Databases[databaseName]; db.SetOnline(); sqlServer.Refresh(); db.DatabaseOptions.UserAccess = DatabaseUserAccess.Multiple; }
      
      





DatabaseManager.cs рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рд╡рд░рдг



рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!



All Articles