【发布时间】:2021-07-22 02:27:26
【问题描述】:
我目前正在进行一个项目,我正在开发一个类库,稍后将作为 nugget 包上传,这样如果用户创建 .NET Core 应用程序,她/他可以下载 nugget 包并使用相应地。
基本上在类库中,Entity Framework、Nethereum 和其他包作为依赖项安装。我的目标之一是不要求用户将实体框架添加到他们的应用程序中(因为 nugget 包(,即我正在构建的类库))已经安装了它。因此,在类库中有一个接受数据库连接字符串并构建选项的 DbContext。
public class BEFDbContext: DbContext
{
public BEFDbContext(string connectionString) :
base(SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options) { }
public DbSet<ApplicationEvent> Events { get; set; }
}
接下来,用户必须在应用程序代码中创建另一个类,以扩展类库中的 BEFDbContext 类。
public class NewDatabaseContext: BEFDbContext
{
public NewDatabaseContext(string connectionString):base(connectionString){}
}
到目前为止一切顺利,但是,在这一点上,我想在 Startup.cs 类中“初始化”NewDatabaseContext 类。通常,人们会使用实体框架并添加这样的代码:
services.AddDbContextPool<NewDatabaseContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("defaultconnection"));
});
然而,正如我之前提到的,其中一个目标是不要求用户/开发人员将实体框架添加到应用程序中(再一次,因为我们在类库中拥有它)。
所以,我的问题是如何在不使用实体框架的情况下将 NewDatabaseContext 类添加为 Startup.cs 中的 DbCcontext?
【问题讨论】:
-
实体正在使用 dbContext,它是所有数据连接的基类。所以 BulkCopy 会起作用。请参阅:stackoverflow.com/questions/2553545/…
-
嘿。只是让您知道... Asp Net Core 具有依赖继承,即:如果 nuget 包引用 EntityFramework 那么您的应用程序会自动具有此
-
@IhusaanAhmed 第一个回复,您的意思是我可以使用“常规”方法添加 DbContext 类?这意味着我可以直接使用 BEFDbContext (在类库中)而不是 NewDatabaseContext (在应用程序中)?
-
抱歉回复晚了,但我想说的是,即使您没有直接将
EntityFrameworkCoreNuget 添加到应用程序中,您也可以使用AddDbContext或AddDbContextPool,因为那个nuget包将由应用程序从类库“继承”。如果你想要另一种方式,你也可以使用扩展方法。如果你愿意,我可以在答案中告诉你如何做到这一点 -
只需简单地“指出”我就可以通过继承来做到这一点,但以另一种方式,我可以克服这个问题。感谢您的意见。虽然这是一种替代解决方案,但此处提出的具体问题尚未得到解答。
标签: c# .net entity-framework class-library asp.net-core-5.0