其主要思想是将each包添加到.NET核心库项目中,然后在一组应用程序(例如,ASP.NET核心、Win服务、控制台应用程序)中使用该库,而无需在每个应用程序中配置EF。并且,如果可能的话,不要在每个包中添加EF包。我在想这是否可能。
我目前的问题是我不能根据我在库项目中的模型创建一个数据库。
看来我不能只选择Package控制台中的库项目并运行更新数据库。它希望我实现'IDesignTimeDbContextFactory‘。
我正在使用.NET Core2.1。如果我把它更新到最新版本会有帮助吗?
发布于 2019-06-29 21:29:44
简而言之,是的,你能做到。你可以跟随媒体故事"在单独项目中使用实体框架核心的.NET核心 - “。这个故事代表了一个示例应用程序的良好而详细的表示,该应用程序将.NET核心解决方案分为三个不同的项目:业务逻辑项目、数据访问层项目和web项目。
作者是罗德里戈·桑托斯,他是一个全栈开发人员和NET爱好者。像我过去那样,可以自由地跟踪他的工作。可能对你有帮助。
发布于 2019-06-28 16:32:33
正如错误中提到的,您需要实现IDesignTimeDbContextFactory,它是Microsoft.EntityFrameworkCore.Design包的一部分,所以继续在库中安装它。然后创建一个适当实现IDesignTimeDbContextFactory的类。
由于您创建了一个.NET核心库,将其设置为您的启动项目。
然后在Package控制台中,选择库作为默认项目并运行update-database。
发布于 2019-06-29 01:25:13
是的,你能做到的。
确保安装了所有先决条件。
public class Context
{
// See all queries generated by EF in debug window
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[] { new DebugLoggerProvider((s, level) => level >= LogLevel.Trace) });
public static DF.Data.Models.EF.YourContext GetContext()
{
var optionsBuilder = new DbContextOptionsBuilder<DF.Data.Models.EF.YourContext>();
optionsBuilder.UseSqlServer(
"Your Connection String").UseLoggerFactory(MyLoggerFactory);
return new DF.Data.Models.EF.YourContext(optionsBuilder.Options);
}
public partial class YourContext : DbContext
{
public YourContext(DbContextOptions optionsBuilderOptions) : base(optionsBuilderOptions)
{
}
}
}注意:当您再次搭建数据库时,请确保从下拉列表中选择类库项目作为默认项目。然后将另一个项目设置为启动项目。
https://stackoverflow.com/questions/56798579
复制相似问题