EF核心中的持久性数据层,动态EF。将EF与模型分开

时间:2019-05-23 11:04:12

标签: c# entity-framework-core ef-model-builder

我想从模型中分离EF层。

我需要一个EF Builder来将我的模型发送给它(我为mongodb找到了此代码,但我需要EF core):

        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
  },

这是mongo示例代码:

enter image description here

public static class Extensions
    {
        public static void AddMongo(this ContainerBuilder builder)
        {
            builder.Register(context =>
            {
                var configuration = context.Resolve<IConfiguration>();
                var options = configuration.GetOptions<MongoDbOptions>("mongo");

                return options;
            }).SingleInstance();

            builder.Register(context =>
            {
                var options = context.Resolve<MongoDbOptions>();

                return new MongoClient(options.ConnectionString);
            }).SingleInstance();

            builder.Register(context =>
            {
                var options = context.Resolve<MongoDbOptions>();
                var client = context.Resolve<MongoClient>();
                return client.GetDatabase(options.Database);

            }).InstancePerLifetimeScope();

            builder.RegisterType<EFDbInitializer>()
                .As<IEFDbInitializer>()
                .InstancePerLifetimeScope();

            builder.RegisterType<MongoDbSeeder>()
                .As<IEFDbSeeder>()
                .InstancePerLifetimeScope();
        }

        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();
    }

我的问题是:像mongo一样,EF是否有解决方案?

mongoDb的所有代码都可用。

1 个答案:

答案 0 :(得分:2)

首先,我相信会有一些困惑:

  • MongoDB是一个数据库
  • Entity Core是一个ORM。它允许您访问存储中的数据

也就是说,您可以将EF Core与several data storages配合使用,例如MongoDB或SQL Server。

在实体(数据访问层)和业务模型之间设置单独的层是一种很好的做法,应鼓励这样做。

因为主题广泛,并且存在大量文档和教程以及该主题,所以我更愿意为您提供一些链接,而不是为您提供完整的体系结构。

您可以从Microsoft检查this documentation来查看相关的层以及它们应包含的内容。

此外,我建议您咨询this github repo,该公司提供了大量基于.net核心的干净架构。

可以随意深入研究那些链接,它们提供了许多宝贵的信息。

希望有帮助。