Когда вы читаете этот вопрос, вы думаете, что это повторяющийся вопрос, и что я недостаточно занимался поиском решения этой проблемы. К сожалению, я потратил много часов на поиски решения этой проблемы. Я занимаюсь разработкой приложения ASP.NET Core 2.1, которое состоит в основном из ASP.NET Web APP и Entity Framework Core.
Я использую первый подход кода для добавления миграций и обновления базы данных, и все выглядит нормально, пока я не отделил основное веб-приложение asp.net от ядра Entity Framework. На самом деле, я поместил EntityFrameworkCore в отдельную библиотеку классов.
Когда я пытался добавить новую миграцию, используя
dotnet ef migrations add InitialCreate
У меня была эта ошибка
Произошла ошибка при доступе к IWebHost в классе «Программа». Продолжая без поставщика услуг приложения. Ошибка: не удалось загрузить тип 'EF.EFCore.ApplicationDbContext' из сборки 'ef, версия = 2.1.4.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60'.
System.TypeLoadException: не удалось загрузить тип 'EF.EFCore.ApplicationDbContext' из сборки 'EF, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null'.
в System.Reflection.CustomAttribute._CreateCaObject (RuntimeModule pModule, IRuntimeMethodInfo pCtor, байт ** ppBlob, байт * pEndBlob, Int32 * pcNamedArgs)
в System.Reflection.CustomAttribute.CreateCaObject (модуль RuntimeModule, IRuntimeMethodInfo ctor, IntPtr & blob, IntPtr blobEnd, Int32 & namedArgs)
в System.Reflection.CustomAttribute.GetCustomAttributes (RuntimeModule decorModule, Int32 decorMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, логическое значение mustBeInheritable, IList производные атрибуты)
в System.Reflection.CustomAttribute.GetCustomAttributes (тип RuntimeType, тип RuntimeType caType, логическое наследование)
в System.Attribute.GetCustomAttributes (элемент MemberInfo, тип Type, логическое наследование)
в System.Attribute.GetCustomAttribute (элемент MemberInfo, тип attributeType, логическое наследование)
в System.Reflection.CustomAttributeExtensions.GetCustomAttribute [T] (элемент MemberInfo)
в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations. <> c.b__12_5 (TypeInfo t)
в System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext ()
в System.Linq.Enumerable.ConcatIterator 1.MoveNext()
at System.Linq.Enumerable.DistinctIterator
1.MoveNext ()
в System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext()
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.FindContextTypes()
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.FindContextType(String name)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0
1.b__0 ()
в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Действие действия)
Не удалось загрузить тип 'EF.EFCore.ApplicationDbContext' из сборки 'EF, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль'.
Я уверен, что проблема связана с разделением проекта на форму компонента
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(conString,builder => builder.MigrationsAssembly(typeof(Startup).Assembly.FullName)));
приведенный выше код - это код, который я использую для своего класса ApplicationDBContext, который является производным от IdentityContext, добавьте или удалите MigrationAssembly, от этого ничего не меняется. Кроме того, добавление IDbContextFactory не имеет большого значения
Я изменил ApplicationDbContext, производный от IdentityContext, на следующий
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Entity
string conString = "Server=(local); Database=OnlineStoreDB;User Id=sa;Password=123@asu;";
optionsBuilder.UseSqlServer(conString, x => x.MigrationsAssembly("EF"));
base.OnConfiguring(optionsBuilder);
// base.OnConfiguring(optionsBuilder);
//if (!optionsBuilder.IsConfigured)
//{
// optionsBuilder.UseSqlServer(conString);
//}
//else
//{
// optionsBuilder.UseSqlServer(conString);
//}
}