首页 > 解决方案 > .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();
    }

标签: c#entity-framework-core

解决方案


我将使用我目前正在处理的项目 ( 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 核心,我认为这已经包含在内)。


推荐阅读