当我的模型和存储库位于类库中时,如何在 .Net Core 中使用 DotNet 迁移?

2024-03-16

我正在关注这篇关于如何为 ASP.Net Core 创建通用存储库的文章/教程:http://www.c-sharpcorner.com/article/generic-repository-pattern-in-asp-net-core/ http://www.c-sharpcorner.com/article/generic-repository-pattern-in-asp-net-core/

当我下载代码时,我可以运行迁移并且项目运行并运行。

但是,当我按照说明并尝试从头开始构建时,当我到达必须运行迁移的地步时:

Add-migration MyFirstMigration

我收到此错误:

C:\Tutorials\ASP.Net\Core\GenericRepository\FromScratch\GenericRepository\GR.Web\project.json(20,43):警告 NU1012:依赖项冲突。 Microsoft.EntityFrameworkCore 1.1.0 预期 Microsoft.Extensions.Logging >= 1.1.0 但收到 1.0.0 在“ApplicationContext”上找不到无参数构造函数。将无参数构造函数添加到“ApplicationContext”,或者在与“ApplicationContext”相同的程序集中添加“IDbContextFactory”的实现。

本教程在类库中定义了模型和存储库,包括:

namespace GR.Data
{
    public class ApplicationContext : DbContext
    {
        public ApplicationContext(DbContextOptions<ApplicationContext> options)
        : base(options) { }

        protected override void OnModelCreating(ModelBuilder modelBuilder){
        base.OnModelCreating(modelBuilder);
        new AuthorMap(modelBuilder.Entity<Author>());
        new BookMap(modelBuilder.Entity<Book>());
        }
    }
}

这些选项是从 Web 项目中的 StartUp.cs 传入的,如下所示:

public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddApplicationInsightsTelemetry(Configuration);
        services.AddMvc();

        services.AddDbContext<ApplicationContext>(
            options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
    }

它从 Web 项目 GR.Web 中的 appsettings.json 获取连接字符串。

在包管理器控制台中,我选择 GR.Data 作为默认项目,并将 GR.Web 设置为启动项目。我收到此错误:

C:\Tutorials\ASP.Net\Core\GenericRepository\FromScratch\GenericRepository\GR.Web\project.json(20,43):警告 NU1012:依赖项冲突。 Microsoft.EntityFrameworkCore 1.1.0 预期 Microsoft.Extensions.Logging >= 1.1.0 但收到 1.0.0 在“ApplicationContext”上找不到无参数构造函数。将无参数构造函数添加到“ApplicationContext”,或者在与“ApplicationContext”相同的程序集中添加“IDbContextFactory”的实现。

下载如何进行以及如何让我的下载工作。 如此迷茫。 最重要的是,我必须永远使用它才能将 EF Core 和 Tools Preview 的所有依赖项获取到正确的版本上,才能走到这一步。

有没有更好的文章介绍如何做到这一点?


我解决了: "Microsoft.Extensions.Logging": "1.0.0",

到 "Microsoft.Extensions.Logging": "1.1.0",

现在我得到这个错误:

System.TypeLoadException:程序集“Microsoft.EntityFrameworkCore.Relational,Version=1.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”中类型“Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationalColumnAttributeConvention”中的方法“Apply”没有执行。在 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationalConventionSetBuilder.AddConventions(ConventionSet conventionSet) 在 Microsoft.EntityFrameworkCore.Metadata.Conventions.SqlServerConventionSetBuilder.AddConventions(ConventionSet conventionSet) 在 Microsoft.EntityFrameworkCore.Infrastruct.ModelSource.CreateModel(DbContext 上下文、IConventionSetBuilder conventionSetBuilder、IModelValidator 验证器) 在 System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 值工厂) 在 Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() 在 Microsoft.EntityFrameworkCore.Internal.LazyRef1.get_Value() at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsAddCommand.Execute(CommonOptions commonOptions, String name, String outputDir, String context, String environment, Action记者1名) 在 Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsAddCommand.c__DisplayClass0_0.b__0() 在 Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) 在 Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args) 程序集“Microsoft.EntityFrameworkCore.Relational,Version=1.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”的类型“Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationalColumnAttributeConvention”中的方法“Apply”没有实现。


在 Web 项目 GR.Web 的依赖项中,我回滚了

"Microsoft.EntityFrameworkCore": "1.1.0"

to

"Microsoft.EntityFrameworkCore": "1.0.1"

现在可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我的模型和存储库位于类库中时,如何在 .Net Core 中使用 DotNet 迁移? 的相关文章

随机推荐