c# - .Net Core 中持久性 DataLayer 的通用 EF 模型生成器
问题描述
我想将我的实体从 .Net Core 中的 API 传递到我的 SQL Server 数据库。我需要一个可以添加到 Container builder 并帮助我在 Startup.cs 中的 ConfigureServices 方法中使用的扩展或模块我根据我的需要找到了一个项目(https://github.com/devmentors/DNC-DShop),但是此示例已使用 MongoDB 实现。我想用 SQLSERVER DB 和 EF ORM 实现同样的事情。
此代码在 Mongo Sample 的启动文件中:
builder.AddMongo();
builder.AddMongoRepository<Cart>("Carts");
builder.AddMongoRepository<Customer>("Customers");
builder.AddMongoRepository<Product>("Products");
applicationsetting.json 文件中的这段代码:
"mongo": {
"connectionString": "mongodb://localhost:27017",
"database": "customers-service",
"seed": false
},
此代码在 Extension.cs 中:
public static class Extensions
{
public static void AddMongoRepository<TEntity>(this ContainerBuilder builder, string collectionName)
where TEntity : IIdentifiable
=> builder.Register(ctx => new EFRepository<TEntity>(ctx.Resolve<IMongoDatabase>(), collectionName))
.As<IMongoRepository<TEntity>>()
.InstancePerLifetimeScope();
}
解决方案
我将使用我目前正在处理的项目 ( Sppd.TeamTuner ) 描述一个解决方案,该项目支持多个数据库提供程序。
有一个 *.DataAccess.EF.csproj 项目,注册所需的服务并配置 DbContext。重要的是要了解该项目不注册使用的数据库实例,它仅指定实体将如何存储。对您来说有趣的课程都是这里TeamTunerContext.cs
的部分课程。我在您的示例中添加了这一段,似乎您与 MongoDb 相结合,这不是必需的。
您正在寻找的内容,告诉您使用什么数据库,正在一个专用的数据库提供程序项目(MsSql、Sqlite、InMemory)中完成。当您想使用 SQL 时,这一行是相关的:
services.AddDbContext<TeamTunerContextMsSql>(options => options.UseSqlServer(databaseConfig.ConnectionString))
为此,引用了包含扩展方法的 nuget 包Microsoft.EntityFrameworkCore.SqlServerUseSqlServer
。(如果您在项目中引用 asp.net 核心,我认为这已经包含在内)。
推荐阅读
- accelerometer - 我可以使用什么算法来计算使用加速度计和陀螺仪的步数?
- excel - 将 Word 文件表格复制到 Excel 文件(合并单元格和多行单元格)
- angular - Angular: setting ViewEncapsulation.None globally
- java - Scala 类型的语句?
- python - 如何在python中将文件保存为excel时显示进度条?
- c++ - 通过串行通信发送的每个值后为零
- bash - sqlite3 无法仅从 1 个 tsv 文件导入数据
- android - 隐藏我点击的 Recyclerview 孩子
- java - 每月数据表建模的最佳实践
- osgi - 还有更多类似 OSGi 的吗?