- Db First
- Code First
- add-migration {{migrationname}}
- update-database
- remove-migration
- script-migration
• Metotları
- Add/AddSync
- Update
- Remove
- Find/FindAsync
- SaveChanges/SaveChangesAsync
• State Types : _context.Entry(p).State;
- Added
- Modified
- Deleted
- Unchanged : ilk kez çekilen veya savechanges sonrası ilk kez gelen bir kaydın statüsüdür.
- Detached : track edilmeyen veya silinmiş artık db de olmayan bir kaydın statüsüdür.
• Properties:
- ChangeTracker : memoryde track edilen datalara erişmemizi sağlar. _context.ChangeTracker.Entries().ToList();
- ContextId (Logging) : her bir dbcontext e verdiği id dir.
- Database (connection, command, transaction, raw sql) : veritabanı ile ilgili genel işlemlerde bu propertyi kullanırız.
• Metotları:
- Add/AddSync
- Update
- Remove
- AsNoTracking : sqlden gelen datanın track edilmemesini sağlar, memory de tutulmaz, propertyleri değişmicekse kullanılır.
- Find /FindAsync : priary key ile aramada kullanılır.
- FirstOrDefault : arana kriterlerde bir yada birden fazla data varsa ilkini döner yoksa null döner.
- SingleOrDefault : aranan kriterde birden fazla kayıt varsa hata fırlatır. yada hiç kayıt yoksa null döner. aranan kriterde tek bir data varsa onu döner.
- First : şartı sağlayan bir tane kayıt varsa döner, yoksa hata fırlatır.
- Single : şartı sağlayan bir tane kayıt varsa döner, yoksa yada birden fazla varsa hata fırlatır.
- Where
- One-to-many
- One-to-one
- Many-to-many
- Cascade : default gelen davranıştır. Category silinirse, bağlı olan productlardan tablodan silinir.
- Restrict: eğer categorye bağlı productlar varsa categorynin silinmesini engeller.
- SetNull : child tablosunda foreignkey nullable ise yani product tablosundaki categoryid nullable ise, category tablosundan silinen bir kayıt olursa onun bağlı olduğu productların categoryid sini null olarak set eder.
- NoAction : hiçbir şeye karışmaz.
- Eager Loading : Include(), ThenInclude()
- Explicit Loading: Collection().Load(), Reference().Load()
- Lazy Loading : Microsoft.EntityFrameworkCore.Proxies ve UseLazyLoadingProxies()
- TPH: table-per-hierarchy
- Base class, dbcontext classında hiç belirtilmez ve child classlar base classtan miras alarak ayrı ayrı tabloları db de oluşur, ama base classın oluşmaz.
- Base class da db context classında belirtilir. Bu durumda db de tek bir tablo olıuşur. Base classın adında bir tablo oluşur ve onu miras alan tablolardaki diğer propertyler de burada oluşur. Ek olarak da ef core discriminator diye bir kolon oluşturur ve hangi entityden geldiğini tutar.
- TPT : table-per-type
- Base class ve tüm childlar da db de oluşsun istiyorsak burada OnModelCreating metotunda kod yazmamız gerek.
- Owned Entity Types: [Owned] / OwnsOne()
- Keyless Entity Types: [Keyless] / HasNoKey()
- [NotMapped] /Ignore()
- [Column(“Name”)]: [Column(TypeName=”nvarchar(200)”)] / hascolumnName(“name”).hasColumnType(“varchar(200)”)
- [Unicode(false)] : varchar / Isunicode(false);
- Normal Index : [Index(“”)] / HasIndex(x)
- Composed Index: [Index(“”,””)] / HasIndex(x,y)
- Included Column : HasIndex().IncludeProperties()
- Check Constraint: HasCheckConstraint()
- FromSqlRaw()
- FromSqlInterpolated()
- toSqlQuer()
- ToView()
- Entity
- DTO/View Model
- Anonymous Type
- Client Wins or Last in Wins scenario (automatically) : son gelen transactiondaki veriler basılır.
- Store Wins : son güncel değerleri görerek güncellemek oluyor. IsRowVersion() & DbCurrencyException()
Type of Concurrency
- Optimistic concurrency control : efcore default davranış.
- Pessimistic concurrency control (xlock) : ilgili querye lock konur ve başka transactionlar okuma dahil yapılmaz.