我正在关注这篇关于如何为 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, Func
2 值工厂)
在 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”没有实现。