рд╡рд┐рд░рд╛рд╕рдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреАрдЪреЗрддрд╛рд╡рдиреА: ASP.NET MVC рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред ASP.NET рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкрдврд╝реЗрдВред
рдореИрдВрдиреЗ
ASP.NET MVC рдФрд░ MySQL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рд▓рдЧрднрдЧ рдорд╛рдирдХ ORM рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ (EF) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ASP.NET MVC рдореЗрдВ MySQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди ADO.NET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ DBMS рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдЗрд╕ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрджреНрдпрдкрд┐ рд╡рд┐рдзрд┐ рдкреБрд░рд╛рдиреА рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрддреА рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдпрд╛ рдЬрдм рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдУрдЖрд░рдПрдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА SQL рдХреНрд╡реЗрд░реА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдХрднреА-рдХрднреА рдЖрдк рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ - рджреЛрдиреЛрдВ ORM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ ADO.NET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдФрд░ рдЖрд╡реЗрджрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдЗрд╕рдореЗрдВ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡реЗрджрди рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рдирд╛ред
рдЗрд╕ рдкрддреЗ рдкрд░ рд╕рднреА рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдиреАрдЪреЗ рдЗрд╕ рдХреЛрдб рдХреЛ
рдкрд┐рдЫрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЫреЛрдЯреЗ рд▓рд┐рдВрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдВ рдЖрдк
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦ рд╕рдХрддреЗ
рд╣реИрдВ ред
рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ
1. MySQL рдХреЗ рд╕рд╛рде Entity рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
MySQL.Data.EntityFramework рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рд╣реЛрдЧрд╛ (рдЖрдк, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдФрд░ рдУрд░реЗрдХрд▓ рд╕реЗ рдпрд╣ рдПрдХ, MySQL рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ)ред

рдпрд╣
MySQL.Data рдФрд░
EntityFramework рдХреЛ рд╣реА рдЦреАрдВрдЪреЗрдЧрд╛ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди
web.config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдП рдЧрдП рдереЗ:
<entityFramework> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.19.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </providers> </entityFramework>
MySQL.Data рдХреЗ рд╕рд╛рде
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдШрд░реНрд╖ рдкреИрджрд╛ рд╣реБрдЖ - рдЪреВрдВрдХрд┐
MySQL.Data.EntityFramework рдХреЛ рдХрдо рд╕реЗ рдХрдо 8.0.19 рдХреЗ
MySQL.Data рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдпрд╣ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ... рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рд▓рдЧреА:

┬лUbiety.Dns.Core┬╗ . . , , . ( HRESULT: 0x80131045)
рдЬрд╛рд╣рд┐рд░ рд╣реИ,
рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА Ubiety.Dns.Core рдХреЛ
MySQL.Data 8.0.19 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдЗрд╕ рдШрдЯрдХ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдиреБрдЧреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдерд╛ред рддреНрд░реБрдЯрд┐ рд╣реЛ рдЧрдИ рд╣реИред
2. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ Ninject рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ (DI)ред
3. рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗ: рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ
рдбрд╛рд▓реЗрдВрдЧреЗ рдФрд░
рдЗрд╕рдореЗрдВ ADO.NET рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдмрдирд╛рдПрдВрдЧреЗ (рд╣рдо рдореМрдЬреВрджрд╛
LanguageRepository.cs рдФрд░
рд╡рд╣рд╛рдВ UsersRepository.cs рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВрдЧреЗ) рдФрд░
EF (Entity Framework рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдпрд╣рд╛рдБ рд╣реЛрдВрдЧреА)ред
4. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
appConfig
рд╕реЗрдХреНрд╢рди рдореЗрдВ
web.config рдлрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:
<add key="ConnectionMethod" value="ADO.NET" />
ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЛ рдорд╛рди рд▓реЗрдЧрд╛: "рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ" рдпрд╛ "ADO.NET"ред
рдЖрдзрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП
рдПрдХ рд▓рд┐рдВрдХ
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ :
public static string ConnectionMethod { get { return System.Configuration.ConfigurationManager.AppSettings["ConnectionMethod"]; } }
рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ MySQL - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
DFContext.cs рдлрд╝рд╛рдЗрд▓ рдХреЛ
EFDbContext
рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА \ EF3 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
public class EFDbContext : DbContext { public EFDbContext() : base(Base.ConnectionString) { } public DbSet<UserClass> Users { get; set; } public DbSet<LanguageClass> Languages { get; set; } }
рдЗрд╕рдореЗрдВ, рд╣рдо рдкреНрд░рдпреБрдХреНрдд DBMS рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░
Users
рдФрд░
Languages
рдбреЗрдЯрд╛ рд╕реЗрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
LanguageRepositoryEF.cs рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде
LanguagesRepositoryEF
рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:
public class LanguagesRepositoryEF : ILanguagesRepository { private EFDbContext context = new EFDbContext(); public IList<LanguageClass> List() { return context.Languages.OrderBy(x => x.LanguageName).ToList(); } }
рдФрд░
UsersRepositoryEF.cs рдлрд╛рдЗрд▓ рдХреЛ
UsersRepositoryEF
рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде:
public class UsersRepositoryEF : IUsersRepository { private EFDbContext context = new EFDbContext(); public IList<UserClass> List() { return context.Users.ToList(); } public IList<UserClass> List(string sortName, SortDirection sortDir, int page, int pageSize, out int count) { count = context.Users.Count(); if (sortName != null) return context.Users.OrderByDynamic(sortName, sortDir).Skip((page - 1) * pageSize).Take(pageSize).ToList(); else return context.Users.OrderBy(o => o.UserID).Skip((page - 1) * pageSize).Take(pageSize).ToList(); } public bool AddUser(UserClass user) { user.Language = context.Languages.Find(user.Language.LanguageID); if (user.Language != null && context.Users.Add(user) != null) { try { context.SaveChanges(); } catch (System.Exception ex) {} } return user.UserID > 0; } public UserClass FetchByID(int userID) { UserClass user = null; try { user = context.Users.Find(userID); } catch (System.Exception ex) { } return user; } public bool ChangeUser(UserClass user) { bool result = false; user.Language = context.Languages.Find(user.Language.LanguageID); if (user.Language != null) { UserClass olduser = context.Users.Find(user.UserID); if (olduser != null) { olduser.Email = user.Email; olduser.Loginname = user.Loginname; olduser.Language = user.Language; olduser.SupporterTier = user.SupporterTier; try { result = context.SaveChanges() > 0; } catch (System.Exception ex) { } } } return result; } public bool RemoveUser(UserClass user) { bool result = false; UserClass olduser = context.Users.Find(user.UserID); if (olduser != null) context.Users.Remove(olduser); try { result = context.SaveChanges() > 0; } catch (System.Exception ex) { } return result; } }
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ ADO.NET рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдо рд╣реИ - ORM рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЧрдВрджрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЕрдкрдиреЗ рдЖрдк SQL рдХреНрд╡реЗрд░реА рдмрдирд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ ADO.NET рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд░реЛрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдмрд┐рдВрджреБ рдорд┐рд▓реЗ, рд▓реЗрдХрд┐рди EF рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ
UserClass.cs рдлрд╝рд╛рдЗрд▓ (
рдбреЛрдореЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ) рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдерд╛:
Users
рдФрд░
Languages
рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:
[HiddenInput(DisplayValue = false)] public int? LanguageID { get; set; }
рдФрд░ рджреВрд╕рд░рд╛ - рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ MySQL рдореЗрдВ рдлрд╝реАрд▓реНрдб рдЬреИрд╕реЗ
Enum
EF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдЧрдгрдирд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ EF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ MySQL рд╕реЗ рдХреНрд╡реЗрд░реА рдореЗрдВ рдЯрд╛рдЗрдк рдПрдирдо MySQL рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдЗрд╕ рдЧрдгрдирд╛ рдХреЗ рдкрд╛рда рдорд╛рди рд╣реИрдВ)ред рдФрд░ рдЕрдЧрд░ ADO.NET рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ
CAST(u.SupporterTier AS UNSIGNED) as SupporterTier
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
CAST(u.SupporterTier AS UNSIGNED) as SupporterTier
рдирд┐рд░реНрдорд╛рдг рдХреЗ
CAST(u.SupporterTier AS UNSIGNED) as SupporterTier
рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ EF рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдореЗрдЯрд╛рдореЛрд░реНрдлреЛрд╕рд┐рд╕ рдореЗрд░реЗ рд▓рд┐рдП
CAST(u.SupporterTier AS UNSIGNED) as SupporterTier
рдирд┐рдХрд▓рд╛ - рдХреЛрдИ рднреА рдЖрдЬрдорд╛рдпрд╛ рд╣реБрдЖ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЖрдпрд╛ред рдЦреИрд░, рдЪреВрдВрдХрд┐
рдХреЛрдб рдкреНрд░рдердо рддрдХрдиреАрдХ рдЯрд╛рдЗрдк INT рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ
Enum
рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдлрд╝реАрд▓реНрдб
SupporterTier
рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛:
CHANGE COLUMN `SupporterTier` `SupporterTier` INT(4) UNSIGNED NOT NULL DEFAULT '1' ;
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╛рдЭрд╛ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
LanguagesRepository.cs рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
public interface ILanguagesRepository { IList<LanguageClass> List(); }
рдФрд░
UsersRepository.cs рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓:
public interface IUsersRepository { IList<UserClass> List(); IList<UserClass> List(string sortName, SortDirection sortDir, int page, int pageSize, out int count); bool AddUser(UserClass user); UserClass FetchByID(int userID); bool ChangeUser(UserClass user); bool RemoveUser(UserClass user); }
рдареАрдХ рд╣реИ, рд╣рдо рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рд╡рд╛рд░рд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ:
public class LanguagesRepositoryADO : ILanguagesRepository public class UsersRepositoryADO : IUsersRepository public class LanguagesRepositoryEF : ILanguagesRepository public class UsersRepositoryEF : IUsersRepository
рдЦреИрд░,
UsersController рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ
, рд╣рдо рдРрд╕реЗ рдЬреЛрдбрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
private ILanguagesRepository repLanguages; private IUsersRepository repUsers; public UsersController(ILanguagesRepository langsParam, IUsersRepository usersParam) { repLanguages = langsParam; repUsers = usersParam; }
рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ, рд╣рдо рдХреНрд░рдорд╢рдГ рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ
repLanguages
рдФрд░
repUsers
рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ (DR) рдЬреИрд╕реЗ рдордЬрд╝рдмреВрдд рдЯреЛрдирд╛-
рдЯреЛрдЯрдХреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо Ninject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
рд╣рдо
Application_Start
рдкрджреНрдзрддрд┐ рдореЗрдВ
Global.asax.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ DR рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ:
DependencyResolver.SetResolver(new NinjectDependencyResolver());
NinjectDependencyResolver.cs рдлрд╝рд╛рдЗрд▓ рдХреЛ
NinjectDependencyResolver
рд╡рд░реНрдЧ (
IDependencyResolver
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА) рдХреЗ рд╕рд╛рде
рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
public class NinjectDependencyResolver : IDependencyResolver { private IKernel kernel; public NinjectDependencyResolver() { kernel = new StandardKernel(); AddBindings(); } public object GetService(Type serviceType) { return kernel.TryGet(serviceType); } public IEnumerable<object> GetServices(Type serviceType) { return kernel.GetAll(serviceType); } private void AddBindings() { if (Domain.Base.ConnectionMethod == "Entity Framework") { kernel.Bind<ILanguagesRepository>().To<LanguagesRepositoryEF>(); kernel.Bind<IUsersRepository>().To<UsersRepositoryEF>(); } else { kernel.Bind<ILanguagesRepository>().To<LanguagesRepositoryADO>(); kernel.Bind<IUsersRepository>().To<UsersRepositoryADO>(); } } }
рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рдЬрдЧрд╣ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ DBMS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реАрдзреЗ, ADO.NET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)
AddBindings
NinjectDependencyResolver
рд╡рд░реНрдЧ рдореЗрдВ
AddBindings
рд╡рд┐рдзрд┐ рд╣реИред рдЕрд╕рд▓реА рдЬрд╛рджреВ рдЕрдЧрд░ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
AddBindings
рд╡рд┐рдзрд┐ рдореЗрдВ, ConnectionMethod рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде
ILanguagesRepository
рдФрд░
IUsersRepository
ред рдЬрдм рд╕реЗ рд╣рдордиреЗ рдЖрд╡реЗрджрди
NinjectDependencyResolver
, рд╣рдордиреЗ DR рдХреЛ
NinjectDependencyResolver
рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛, рдФрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╣рдордиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрдВрдзрди рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рдЬрдм MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
UsersController
рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрдВрдЯреНрд░реЛрд▓рд░
UsersController
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛, рдХреНрд▓рд╛рд╕ рдХреЛ
UsersController
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЗрд╕реЗ
IUsersRepository
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (DR рдФрд░ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм ORM рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ DBMS рддрдХ рдкрд╣реБрдВрдЪ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, ADO.NET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рджреВрд░ рдирд╣реАрдВ рдЧрдИ рд╣реИ рдФрд░ рдЬрдм рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╡реЗрджрди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдирд┐рдиреНрдпреВрдЬрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

PS рдФрд░ рдЕрдВрдд рдореЗрдВ: рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛
рдЗрд╕ рдкрддреЗ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдФрд░
рдпрд╣рд╛рдВ рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рдвреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -
рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реАред