Dotnet EF tool sorunlarını giderme nasıl yapılır? Migration sorunları çözümü nasıl yapılır?
Öncelikli olarak dotnet ef aracına her yerden erişebilmek için global yükleme işlemi yapalım. Böylece Powershell, terminal, package manager console vb her yerden dotnet ef cli komutlarına erişebilir hale gelelim.
Yükleme ve güncelleme işlemlerimizi aşağıdaki gibi yapabiliriz.
dotnet tool install --global dotnet-ef
dotnet tool update --global dotnet-ef
Context'imizin olduğu dizine gelip aşağıdaki komutu çalıştıralım
dotnet add package Microsoft.EntityFrameworkCore.Design
Tüm bu işlemleri eğer doğru bir şekilde gerçekleştirdiyseniz unicornumuzun boynuzunu aşağıdaki gibi görebilirsiniz.
dotnet ef
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
Boynuzu göremeyen arkadaşları yorumlara alalım ya da gidip sizde dökümanları inceleyebilirsiniz. Entity Framework Core
Eğer console'da klasik migration harici komutları çalıştıramıyorsanız tek tek bu sorunları çözelim.
dotnet ef migrations add x
Bu komutu çalıştıramayanlar yukarıdaki işlemleri tekrar edip, dökümanı incelemelerini tavsiye ederim.
Could not load file or assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Bu hatanın çözümü komutu çalıştırdığınız projenin sln dosyasını düzenleyin ve aşağıdaki packageların yüklü olup olmadığını kontrol ediniz.
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tools
Unable to create an object of type 'YourDbContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728
Bu hatanın kaynağı şudur. Design Time'da YourDbContext'inizin bulunduğu konumda Startup.cs'de yaptığınız yapılandırmalara erişememesinden kaynaklanan bir hata söz konusudur. Bunun için bir Factory sınıfı oluşturup hatanın kaynaklandığı projeye eklememiz gerekmektedir. Bu oluşturduğuz sınıfı kullanarak dotnet ef tool veritabanı bağlantı adresini ve yapılandırmalarını rahatlıkla bulup okuyabilecek hale gelecektir.
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
namespace Project.Data
{
public class YourDbContextFactory : IDesignTimeDbContextFactory<YourDbContext>
{
/// <summary>
/// You can use dotnet ef cli commands with this for different ides.
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
public YourDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<YourDbContext>();
optionsBuilder.UseMySql("server=127.0.0.1;database=test_db;user=root;password=123456",
new MySqlServerVersion(new Version(10, 1, 40)),
mySqlOptions => mySqlOptions.CharSetBehavior(CharSetBehavior.NeverAppend));
return new YourDbContext(optionsBuilder.Options);
}
}
}
Burada ben MySQL için yapılandırma yapmıştım. Siz burayı Startup.cs de yaptığınız gibi aynı MSSQL içinde yapabilirsiniz.
.NET 5.0.103 MySQL sorunu
Dotnet 5 de henüz EntityFrameworkCore da bulunan standart MySQL paketi sağlıklı çalışmamaktadır. Migration işlemlerinde problem çıkardığı için bu paketi Pomelo.EntityFrameworkCore.MySql preview ile değiştirdik. Bu paketin daha yeni bir sürümü çıktığında preview olmayan sürümünü kullanmanızı tavsiye ederim, benim şaun alternatif çözümüm olmadığından bu şekilde devam edeceğiz.
Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2
Diğer problemlerinizi yoruma eklerseniz yardımcı olabiliriz.. İyi çalışmalar dilerim..