我的解决方案中有3个项目,如下所示:
因此,在模型项目中,我定义了表,关系,查询及其类,然后在ProjectA和ProjectB上添加了它们。
在services.startd.cs中的ProjectB(.net核心)上,通过services.AddDbContext尝试添加dbcontext(ModelProject),但出现此错误:
无法将lambda表达式转换为“ ServiceLifetime”类型,因为它不是委托类型
在Core Project上使用EF是否会出错?我该如何解决?
ProjectB(核心):
services .AddEntityFrameworkSqlServer() .AddDbContext<Models.DataContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("DataContext")); });
和dbcontext(EntityFramework标准):
namespace ModelProject
{
public class DataContext : DbContext
{
public DataContext() : base("DataContext")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Migrations.Configuration>());
(this as IObjectContextAdapter).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
}
}
}
它必须是:
.AddDbContext<Models.DataContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DataContext")));
换句话说, 没有花括号。您可以选择仅返回options
实例,但这只是不必要的代码膨胀。例外是红鲱鱼。因为您的lambda当前实际上是一个动作(没有返回值),而不是一个AddDbContext
,所以它与AddDbContext
的正确参数不匹配。