0

我想将 EF 层与我的模型分开。

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

        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 示例代码:

在此处输入图像描述

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 的每一部分代码都是可用的。

4

1 回答 1

2

首先,我相信有一点混乱:

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

也就是说,您可以将 EF Core 与多个数据存储一起使用,例如 MongoDB 或 SQL Server。

在您的实体(数据访问层)和您的业务模型之间需要一个单独的层是一种很好的做法,应该受到鼓励。

因为主题很广泛,并且存在大量文档和教程以及主题,所以我更愿意给你一些链接而不是给你一个完整的架构。

您可以查看Microsoft 的此文档以查看相关层以及它们应包含的内容。

另外,我建议你参考这个 github repo,它提供了大量基于 .net 核心的干净架构。

随意挖掘一下这些链接,它们提供了很多宝贵的信息。

希望能帮助到你。

于 2019-05-23T11:19:09.887 回答