ASP NET tolstikov n sgmail com ASP NET

  • Slides: 44
Download presentation
ASP. NET и БД Толстиков Никита tolstikov. n. s@gmail. com ASP. NET

ASP. NET и БД Толстиков Никита tolstikov. n. s@gmail. com ASP. NET

SQL Express Local. DB • Начиная с версии Visual Studio 2012 в комплекте устанавливается

SQL Express Local. DB • Начиная с версии Visual Studio 2012 в комплекте устанавливается SQL Server Express Local. DB • В Visual. Studio: – VIEW -> Server Explorer (Ctrl+W, L) -> Data. Connections -> Add Connections. . -> (localdb)v 11. 0 (версия сервера) 16. 09. 2020 Толстиков Никита ASP. NET 9

Sql. Connection var connection = new System. Data. Sql. Client. Sql. Connection( @"Server=(localdb)v 11.

Sql. Connection var connection = new System. Data. Sql. Client. Sql. Connection( @"Server=(localdb)v 11. 0; Database=test_monsters_db; Integrated Security=true"); using (connection) { connection. Open(); Console. Write. Line(connection. State); } 16. 09. 2020 Толстиков Никита ASP. NET 12

Sql. Command var connection = new Sql. Connection( @"Server=(localdb)v 11. 0; Database=test_monsters_db; Integrated Security=true");

Sql. Command var connection = new Sql. Connection( @"Server=(localdb)v 11. 0; Database=test_monsters_db; Integrated Security=true"); using (connection) { connection. Open(); Console. Write. Line("Connection state: {0}", connection. State); var command = new Sql. Command( "insert into dbo. Monsters values ('Mega. Lucky. Monster', 1, 100, '2010. 1. 1')" , connection); using (command) { int updated = command. Execute. Non. Query(); Console. Write. Line("Updated {0} rows", updated); } } 16. 09. 2020 Толстиков Никита ASP. NET 14

Sql. Data. Reader using (var command = new Sql. Command("select * from dbo. Monsters",

Sql. Data. Reader using (var command = new Sql. Command("select * from dbo. Monsters", connection)) { command. Command. Type = Command. Type. Text; using (var reader = command. Execute. Reader()) { //Columns Names for (int i = 0; i < reader. Field. Count; i++) { Console. Write. Line("Column {0} - {1}", i, reader. Get. Name(i)); } while (reader. Read()) { Console. Write. Line("Monster: {0} {1} {2} {3}", (int)reader[0] //Monster Id , (string)reader["Name"] //Monster Name , reader. Get. Double(3) //Monster Luck. Rate , reader. Get. Field. Value<Date. Time>(4) //Created Date ); } } } 16. 09. 2020 Толстиков Никита ASP. NET 16

ORM • Существует множество реализаций ORM для разных языков: – Hibernate – Java –

ORM • Существует множество реализаций ORM для разных языков: – Hibernate – Java – Active Record – Ruby on Rails – Doctrine – PHP – SQLAclchemy – Python 16. 09. 2020 Толстиков Никита ASP. NET 18

ORM in. NET • В С# удобно использовать ORM из-за LINQ и query DSL

ORM in. NET • В С# удобно использовать ORM из-за LINQ и query DSL • Реализации: – Entity. Framework от Microsoft – Linq. To. Sql от Microsoft – Data Access от Telerik – NHibernate от open source 16. 09. 2020 Толстиков Никита ASP. NET 19

Entity Framework • ORM Framework от Microsoft • Nu. Get – менеджер пакетов для

Entity Framework • ORM Framework от Microsoft • Nu. Get – менеджер пакетов для Visual. Studio • Tools -> Library Package Manager Console Install-Package Entity. Framework 16. 09. 2020 Толстиков Никита ASP. NET 21

Реализация public interface IRepository<TEntity> : IDisposable where TEntity : class { IEnumerable<TEntity> Get( Expression<Func<TEntity,

Реализация public interface IRepository<TEntity> : IDisposable where TEntity : class { IEnumerable<TEntity> Get( Expression<Func<TEntity, bool>> filter = null, string include. Properties = "", Func<IQueryable<TEntity>, IOrdered. Queryable<TEntity>> order. By = null); TEntity Get. By. Id(object id); void Insert(TEntity entity); void Delete(object id); void Delete(TEntity entity. To. Delete); void Update(TEntity entity. To. Update); } 16. 09. 2020 Толстиков Никита ASP. NET 35

Реализация public class Generic. Repository<TEntity> : IRepository<TEntity> where TEntity : class { internal Monsters.

Реализация public class Generic. Repository<TEntity> : IRepository<TEntity> where TEntity : class { internal Monsters. Context context; internal Db. Set<TEntity> db. Set; public Generic. Repository(Monsters. Context context) { this. context = context; this. db. Set = context. Set<TEntity>(); }. . . 16. 09. 2020 Толстиков Никита ASP. NET 36

Реализация public class Generic. Repository<TEntity> : IRepository<TEntity> where TEntity : class { internal Monsters.

Реализация public class Generic. Repository<TEntity> : IRepository<TEntity> where TEntity : class { internal Monsters. Context context; internal Db. Set<TEntity> db. Set; public Generic. Repository(Monsters. Context context) { this. context = context; this. db. Set = context. Set<TEntity>(); }. . . 16. 09. 2020 Толстиков Никита ASP. NET 37

Реализация public virtual IEnumerable<TEntity> Get( Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrdered. Queryable<TEntity>> order.

Реализация public virtual IEnumerable<TEntity> Get( Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrdered. Queryable<TEntity>> order. By = null, string include. Properties = "") { IQueryable<TEntity> query = db. Set; if (filter != null) { query = query. Where(filter); } foreach (var include. Property in include. Properties. Split String. Split. Options. Remove. Empty. Entries)) { query = query. Include(include. Property); } if (order. By != null) return order. By(query). To. List(); else query. To. List(); } 16. 09. 2020 Толстиков Никита ASP. NET 38

Реализация public virtual void Delete(TEntity entity. To. Delete) { if (context. Entry(entity. To. Delete).

Реализация public virtual void Delete(TEntity entity. To. Delete) { if (context. Entry(entity. To. Delete). State == Entity. State. Detached) { db. Set. Attach(entity. To. Delete); } db. Set. Remove(entity. To. Delete); } public virtual void Update(TEntity entity. To. Update) { db. Set. Attach(entity. To. Update); context. Entry(entity. To. Update). State = Entity. State. Modified; } 16. 09. 2020 Толстиков Никита ASP. NET 39

Реализация public virtual TEntity Get. By. ID(object id) { return db. Set. Find(id); }

Реализация public virtual TEntity Get. By. ID(object id) { return db. Set. Find(id); } public virtual void Insert(TEntity entity) { db. Set. Add(entity); } public virtual void Delete(object id) { TEntity entity. To. Delete = db. Set. Find(id); Delete(entity. To. Delete); } 16. 09. 2020 Толстиков Никита ASP. NET 40

Реализация public interface IMonster. Repository { double Calc. Avverage. Lucky(); } public class Monster.

Реализация public interface IMonster. Repository { double Calc. Avverage. Lucky(); } public class Monster. Repository : Generic. Repository<Monster>, IMonster. Repository { public Monster. Repository(Monsters. Context context) : base(context) { } public double Calc. Avverage. Lucky() { return Db. Set. Sum(m => m. Lucky. Rate)/Db. Set. Count(); } } 16. 09. 2020 Толстиков Никита ASP. NET 41

IUnit. Of. Work public interface IUnit. Of. Work : IDisposable { Generic. Repository<Monster> Department.

IUnit. Of. Work public interface IUnit. Of. Work : IDisposable { Generic. Repository<Monster> Department. Repository { get; } Generic. Repository<Weapoon> Course. Repository { get; } void Save(); } 16. 09. 2020 Толстиков Никита ASP. NET 42

Unit. Of. Work public class Unit. Of. Work : IUnit. Of. Work { private

Unit. Of. Work public class Unit. Of. Work : IUnit. Of. Work { private Monsters. Context context = new Monsters. Context(); private Generic. Repository<Monster> department. Repository; private Generic. Repository<Weapoon> course. Repository; public Generic. Repository<Weapoon> Course. Repository { get { if (this. course. Repository == null) { this. course. Repository = new Generic. Repository<Weapoon>(context); } return course. Repository; } } public void Save() { context. Save. Changes(); } 16. 09. 2020 Толстиков Никита ASP. NET 43

The End 16. 09. 2020 Толстиков Никита ASP. NET 44

The End 16. 09. 2020 Толстиков Никита ASP. NET 44