.NET Core中用于持久性数据层的通用EF模型构建器

时间:2019-05-28 06:55:54

标签: c# entity-framework-core

我想将实体从.Net Core中的API传递到我的SQL Server数据库。我需要一个可以添加到“容器”构建器的扩展或模块,并帮助我在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();
    }

1 个答案:

答案 0 :(得分:0)

我将使用当前正在研究的项目(Sppd.TeamTuner)描述一个解决方案,该项目支持多个数据库提供程序。

有一个* .DataAccess.EF.csproj项目,注册所需的服务并配置DbContext。重要的是要理解,该项目不会注册使用的数据库实例,它仅指定如何存储实体。您感兴趣的类都是TeamTunerContext.cs部分here类。我已在您的示例中添加了此段,因为您似乎将其与MongoDb耦合在一起,这不是必需的。

您正在寻找的信息(告诉使用什么数据库)是在一个专用的数据库提供程序项目(MsSql,Sqlite,InMemory)中完成的。当您要使用SQL时,this line是相关的:

services.AddDbContext<TeamTunerContextMsSql>(options => options.UseSqlServer(databaseConfig.ConnectionString))

为此,正在引用包含扩展方法UseSqlServer的nuget软件包Microsoft.EntityFrameworkCore.SqlServer。 (如果您在项目中引用了asp.net核心,我认为它已经包含在内)。