AddingMigrationsUsingDifferentAssemblies我正在ASP.NETCORE1.0.0中做一个项目,我正在使用EntityFrameworkCore。我有单独的程序集,我的项目结构如下所示:ProjectSolution-src-1Domain-Project.Data-2Api-Project.Api在我的Project.Api中是启动类publicvoidConfigureServices(IServiceCollectionservices){services.AddDbContext();services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders();}DbContext在我的Project.Data项目中builder.SetBasePath(Directory.GetCurrentDirectory());builder.AddJsonFile("appsettings.json");IConfiguration配置=builder.Build();optionsBuilder.UseSqlSer(Configuration.GetConnectionString("DefaultConnection"));base.OnConfiguring(optionsBuilder);当我尝试进行初始迁移时,出现此错误:“您的目标项目‘Project.Api’与迁移程序集‘Project.Data’不匹配兼容。更改目标项目或更改迁移程序集。使用DbContextOptionsBuilder更改迁移程序集。例如options.UseSqlServer(connection,b=>b.MigrationsAssembly("Project.Api"))。默认情况下,迁移程序集是包含DbContext的程序集。使用包管理器控制台的“默认项目”下拉列表或执行,将目标项目从包含迁移项目的目录中的“dotnetef”更改为迁移项目。“看到此错误后,我尝试执行位于Project.Api中的此命令:dotnetef--startup-project../Project.Api--assembly"../../1Data/Project.Data"Migrationsadd最初我得到这个错误:“意外值'../../1Domain/Project.Data'”选项'assembly'“当我尝试使用-assembly`执行命令时,我不知道为什么会出现这个错误parametertknowwhyIgetthiserror,whenItrytoexecutethecommandwiththeIdon'tknowwhyIgetthiserror,当我尝试使用.我无法从其他程序集创建初始迁移,我用谷歌搜索了它的信息,但没有得到任何结果。有没有人有类似的问题?所有EF命令都有此检查:if(targetAssembly!=migrationsAssembly)throwMigrationsAssemblyMismatchError;targetAssembly=您正在操作的目标项目。在命令行中,它是当前工作目录中的项目。在包管理器控制台中,它是在该窗口窗格右上角的下拉框中选择的任何项目。migrationsAssembly=包含迁移代码的程序集。这是可配置的。默认情况下,这将是包含DbContext的程序集,在您的例子中是Project.Data.dll。如错误消息所述,您有两种选择来解决此问题1-更改目标组件。cdProject.Data/dotnetef--startup-project../Project.Api/migrationsaddInitial//代码不使用.MigrationsAssembly...只依赖默认选项。UseSqlServer(connection)2-更改迁移程序集。cdProject.Api/dotnetefmigrationsaddInitial//changethedefaultmigrationsassemblyoptions.UseSqlServer(connection,b=>b.MigrationsAssembly("Project.Api"))我遇到了同样的问题,直到我在包管理资源管理器控制台中注意到顶部栏=>“默认项目”应该是“Project.Data”而不是“Project.API”。从下拉列表中找到“Project.Data”并运行迁移后,您应该没问题。我遇到了同样的问题并发现了这个Areyoutryingtorunmigrationsonaclasslibrary?我也是。事实证明这还不受支持,所以我们需要解决它。编辑:我在这个gitrepo上找到了解决方案目前我认为EF只支持在类库中还没有的项目上添加迁移。其他想要将迁移添加到项目内特定文件夹的人请注意:EFCLI尚不支持此功能。我尝试了--data-dir但它没有用。唯一可行的是使用包管理器控制台:选择您的默认项目使用-OutputDir命令参数,-OutputDir,Add-MigrationInitConfigurationStore-OutputDirPersistedStores/ConfigurationStore命令将mgiry输出到文件夹“我的项目中的PersistedStores/ConfigurationStore”。更新于10/12/2017publicvoidConfigureServices(IServiceCollectionservices){...stringdbConnectionString=services.GetConnectionString("YOUR_PROJECT_CONNECTION");stringassemblyName=typeof(ProjectDbContext).Namespace;services.AddDbContext(options=>options.UseSqlServer(dbConnectionString,optionsBuilder=>optionsBuilder.MigrationsAssembly(assemblyName)));...}使用EFCore2,您可以轻松地将Web项目与数据(DbContext)项目分开。实际上,您只需要实现IDesignTimeDbContextFactory接口即可。根据Microsoft文档,IDesignTimeDbContextFactory是:用于创建派生DbContext实例的工厂。实现此接口可为没有公共默认构造函数的上下文类型启用设计时服务。在设计时,可以创建派生的DbContext实例以启用特定的设计时体验,例如迁移。设计时服务将自动在启动程序集中或与派生上下文相同的程序集中发现此接口的实现。在底部的代码片段中,您可以看到我在数据项目中定义的DbContextFactory的实现:GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();vardbContextBuilder=newDbContextOptionsBuilder();varconnectionString=configuration.GetConnectionString("Kuchid");dbContextBuilder.UseSqlServer(connectionString);返回新的KuchidDbContext(dbContextBuilder.Options);我现在可以通过将我的Web项目设置为启动项目并在包管理器控制台中选择我的数据项目来初始化EF迁移。添加迁移初始您可以在此处找到更多详细信息。但是,这篇博文使用的是过时的类,而不是IDesignTimeDbContextFactory。对于拥有多个启动项目的每个人。请注意,您需要将目标项目设置为启动项目-Project.Api(形成问题示例)应该是启动项目。希望对大家有所帮助:)以上就是C#学习教程:使用不同的程序集添加迁移,分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
