我有一个主机类
namespace Trivia.Models
{
public class Host
{
public int Id { get; set; }
public string Name { get; set; }
public int SettingId { get; set; }
//public HostSetting Setting { get; set; }
}
}
上下文
using Microsoft.EntityFrameworkCore;
namespace Trivia.Models
{
public class TriviaDbContext : DbContext
{
public TriviaDbContext(DbContextOptions<TriviaDbContext> options)
: base(options)
{
}
public DbSet<Host> Host { get; set; }
}
}
以下行添加到Configureservices方法的类启动方法
services.AddDbContext<TriviaDbContext>(options =>
options.UseSqlite("Data Source=Trivia.db"));
运行下面的命令
dotnet aspnet -codegenerator控制器-Name hostscontroller -m主机 -dc triviadbcontext - RelativeFolderPath Controller -RusedEfaultLayout -ReferencescriptLibraries
给出以下错误
构建项目...找到生成器"控制器" ...运行 发电机"控制器" ...试图编译应用程序 记忆。试图找出实体框架元数据 模型和dbcontext:"主机": microsoft.aspnetcore.dataprotection.keymanagement.xmlkeymanager [0] 用户配置文件可用。将'/users/path/.aspnet/dataprotection-keys'作为钥匙存储库; 钥匙不会在静止时加密。多个dbcontext命名 发现了" trivia.models.triviadbcontext"。指定使用哪个 使用其确切情况提供其完全合格的名称。StackTrace:
在 Microsoft.entityFrameWorkcore.Design.Internal.dbContextOperations.findContextType(String 名称(at Microsoft.entityFrameWorkcore.Design.Internal.dbContextoperations.CreateContext(String contextType(at Microsoft.visualstudio.web.codegeneration.entityframeworkcore.entityframeworkmodelprocessor.trycreatecontecontectastingusingappcode(type dbContextType,类型startuptype(多个dbcontext命名为'trivia.models.triviadbcontext'是 成立。通过提供完全合格的名称来指定使用哪个 使用确切的情况。在 microsoft.visualstudio.web.codegeneration.actioninvoker.b__6_0(( 在 microsoft.extensions.commandlineutils.commandlineapplication.execute(string [] Args( microsoft.visualstudio.web.codegeneration.actioninvoker.execute(string [] Args( microsoft.visualstudio.web.codegeneration.codegencommand.execute(string [] ARGS(运行时00:00:11.61
我没有多个数据库上下文。
我的program.cs文件
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
//.UseStartup<Startup>()
.UseStartup(typeof(Startup).Assembly.FullName)
.Build();
}
uncomesting//。usestartup((使应用程序起作用。
我仍然希望应用程序使用基于我的环境的启动开发,加上dotnet aspen-codegenerator工作。
而不是使用startupdevelverment,您使用configuredevelopmentsvices并在那里设置环境,例如
public void ConfigureDevelopmentServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<TriviaDbContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("TriviaDb")));
}
好处
- 无需使用启动{enviornmentName} class
- 无需修改程序
- 与dotnet aspnet-generator一起使用
这种方法比在Configureservices方法中使用/其他条件要好得多。
为我指定上下文。在dotnetcore 3.0
中dotnet ef migrations add IntialCreate --project .Persistence -s .API --context DataContext